Browse Source

Merge branch 'master' of https://github.com/aspnetzero/abp

pull/279/head
Halil İbrahim Kalkan 9 years ago
parent
commit
fbe6ca74a4
  1. 20
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs
  2. 16
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs
  3. 2
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/SelectItems.cs
  4. 1335
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt
  5. 2
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/DynamicForms.cshtml
  6. 6
      test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/DynamicForms.cshtml.cs

20
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button;
@ -170,7 +171,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
protected virtual List<ModelExpression> ExploreModelsRecursively(List<ModelExpression> list, ModelExplorer model) protected virtual List<ModelExpression> ExploreModelsRecursively(List<ModelExpression> list, ModelExplorer model)
{ {
if (IsCsharpClassOrPrimitive(model.ModelType)) if (IsCsharpClassOrPrimitive(model.ModelType) || IsListOfCsharpClassOrPrimitive(model.ModelType))
{ {
list.Add(ModelExplorerToModelExpressionConverter(model)); list.Add(ModelExplorerToModelExpressionConverter(model));
@ -199,8 +200,25 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
return new ModelExpression(propertyName, explorer); return new ModelExpression(propertyName, explorer);
} }
protected virtual bool IsListOfCsharpClassOrPrimitive(Type type)
{
var genericType = type.GenericTypeArguments.FirstOrDefault();
if (genericType == null || !IsCsharpClassOrPrimitive(genericType))
{
return false;
}
return type.ToString().StartsWith("System.Collections.Generic.IEnumerable`") || type.ToString().StartsWith("System.Collections.Generic.List`");
}
protected virtual bool IsCsharpClassOrPrimitive(Type type) protected virtual bool IsCsharpClassOrPrimitive(Type type)
{ {
if (type == null)
{
return false;
}
return type.IsPrimitive || return type.IsPrimitive ||
type.IsValueType || type.IsValueType ||
type == typeof(DateTime) || type == typeof(DateTime) ||

16
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs

@ -83,7 +83,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
{ {
var selectItems = TagHelper.AspItems?.ToList(); var selectItems = TagHelper.AspItems?.ToList();
if (TagHelper.AspItems == null && !GetSelectItemsIfProvidedByEnum(context, output, TagHelper.AspFor.ModelExplorer, out selectItems) && !GetSelectItemsIfProvidedFromAttribute(context, output, TagHelper.AspFor.ModelExplorer, out selectItems)) if (TagHelper.AspItems == null &&
!GetSelectItemsIfProvidedByEnum(context, output, TagHelper.AspFor.ModelExplorer, out selectItems) &&
!GetSelectItemsIfProvidedFromAttribute(context, output, TagHelper.AspFor.ModelExplorer, out selectItems))
{ {
throw new Exception("No items provided for select attribute."); throw new Exception("No items provided for select attribute.");
} }
@ -120,7 +122,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
protected virtual bool GetSelectItemsIfProvidedFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List<SelectListItem> selectItems) protected virtual bool GetSelectItemsIfProvidedFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List<SelectListItem> selectItems)
{ {
selectItems = GetAttribute<SelectItems>(explorer)?.GetItems(explorer, explorer.Model.ToString())?.ToList(); selectItems = GetAttribute<SelectItems>(explorer)?.GetItems(explorer)?.ToList();
return selectItems != null; return selectItems != null;
} }
@ -144,12 +146,18 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
{ {
if (TagHelper.AspFor.ModelExplorer.Metadata.IsEnum) if (TagHelper.AspFor.ModelExplorer.Metadata.IsEnum)
{ {
var baseType = TagHelper.AspFor.ModelExplorer.Model.GetType().GetEnumUnderlyingType(); var baseType = TagHelper.AspFor.ModelExplorer.Model?.GetType().GetEnumUnderlyingType();
if (baseType == null)
{
return null;
}
var valueAsString = Convert.ChangeType(TagHelper.AspFor.ModelExplorer.Model, baseType); var valueAsString = Convert.ChangeType(TagHelper.AspFor.ModelExplorer.Model, baseType);
return valueAsString != null ? valueAsString.ToString() : ""; return valueAsString != null ? valueAsString.ToString() : "";
} }
return TagHelper.AspFor.ModelExplorer.Model.ToString(); return TagHelper.AspFor.ModelExplorer.Model?.ToString();
} }
} }
} }

2
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/SelectItems.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
public SelectType SelectType { get; set; } = SelectType.Dropdown; public SelectType SelectType { get; set; } = SelectType.Dropdown;
public IEnumerable<SelectListItem> GetItems(ModelExplorer explorer, string selectedValue) public IEnumerable<SelectListItem> GetItems(ModelExplorer explorer)
{ {
var properties = explorer.Container.Properties.Where(p => p.Metadata.PropertyName.Equals(ItemsListPropertyName)).ToList(); var properties = explorer.Container.Properties.Where(p => p.Metadata.PropertyName.Equals(ItemsListPropertyName)).ToList();

1335
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Logs/logs.txt

File diff suppressed because it is too large

2
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/DynamicForms.cshtml

@ -64,7 +64,7 @@
<div class="demo-with-code"> <div class="demo-with-code">
<div class="demo-area"> <div class="demo-area">
<abp-dynamic-form abp-model="@Model.PersonInput" submit-button="true" /> <abp-dynamic-form abp-model="@Model.PersonInput.Phone" submit-button="true" />
<hr /> <hr />
<h5>Posted Values:</h5> <h5>Posted Values:</h5>
<div> <div>

6
test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/DynamicForms.cshtml.cs

@ -47,7 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
{ {
[Required] [Required]
[DisplayName("Name")] [DisplayName("Name")]
public string Name { get; set; } = "MyName"; public string Name { get; set; }
[Required] [Required]
[DisplayName("Age")] [DisplayName("Age")]
@ -71,6 +71,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
[DisplayName("Country")] [DisplayName("Country")]
[SelectItems(ItemsListPropertyName = nameof(Countries))] [SelectItems(ItemsListPropertyName = nameof(Countries))]
public string Country { get; set; } public string Country { get; set; }
[DisplayName("Country")]
[SelectItems(ItemsListPropertyName = nameof(Countries))]
public IEnumerable<string> MultiCountry { get; set; }
} }
public class PhoneModel public class PhoneModel

Loading…
Cancel
Save