diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs index 2b8f15118a..597b8be601 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs @@ -12,6 +12,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers public abstract class AbpTagHelperService : IAbpTagHelperService where TTagHelper : TagHelper { + protected const string FormGroupContents = "FormGroupContents"; + public TTagHelper TagHelper { get; set; } public virtual int Order { get; } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs index 1e005209a8..50dca5e705 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs @@ -25,23 +25,37 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - var list = new List(); - context.Items.Add("InputGroupContents", list); - - output.TagName = "form"; - output.Attributes.Add("method", "post"); - output.Attributes.Add("action", "#"); - - + var list = InitilizeFormGroupContentsContext(context); + await output.GetChildContentAsync(); + ProcessFields(context, output); + SetContent(output,list); + } + + protected virtual void SetContent(TagHelperOutput output, List list) + { foreach (var itemConfig in list.OrderBy(o => o.Order)) { output.PostContent.SetHtmlContent(output.PostContent.GetContent() + itemConfig.Html); } } + protected virtual void SetFormAttributes(TagHelperOutput output) + { + output.TagName = "form"; + output.Attributes.Add("method", "post"); + output.Attributes.Add("action", "#"); + } + + protected virtual List InitilizeFormGroupContentsContext(TagHelperContext context) + { + var list = new List(); + context.Items.Add(FormGroupContents, list); + return list; + } + protected virtual void ProcessFields(TagHelperContext context, TagHelperOutput output) { var models = GetModels(context, output); @@ -87,6 +101,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form if (IsCsharpClassOrPrimitive(model.ModelType)) { list.Add(ModelExplorerToModelExpressionConverter(model)); + return list; } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index d44f74c8e1..38b8e8f417 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -36,11 +36,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var order = GetAttribute(TagHelper.AspFor.ModelExplorer); - var list = context.Items["InputGroupContents"] as List; + var list = context.Items["InputGroupContents"] as List; if (list != null && !list.Any(igc =>igc.Html.Contains("id=\"" + TagHelper.AspFor.Name.Replace('.', '_') + "\""))) { - list.Add(new InputGroupContent + list.Add(new FormGroupContent { Html = content, Order = order?.Number ?? 0 diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index e0bd59792d..9f1b904548 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -32,11 +32,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var content = GetContent(labelAsHtml,seelctAsHtml); var order = GetAttribute(TagHelper.AspFor.ModelExplorer); - var list = context.Items["InputGroupContents"] as List; + var list = context.Items["InputGroupContents"] as List; if (list != null && !list.Any(igc => igc.Html.Contains("id=\"" + TagHelper.AspFor.Name.Replace('.', '_') + "\""))) { - list.Add(new InputGroupContent + list.Add(new FormGroupContent { Html = content, Order = order?.Number ?? 0 diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/InputGroupContent.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/FormGroupContent.cs similarity index 81% rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/InputGroupContent.cs rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/FormGroupContent.cs index 06694dbf9a..9a1c9e9f3e 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/InputGroupContent.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/FormGroupContent.cs @@ -1,6 +1,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { - public class InputGroupContent + public class FormGroupContent { public string Html { get; set; } diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Forms.cshtml b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Forms.cshtml index 8df7bad9cf..5cada5ef21 100644 --- a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Forms.cshtml +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Forms.cshtml @@ -20,8 +20,8 @@
       
-        <abp-dynamic-form model="Model.Person" >
-        </form>
+        <abp-dynamic-form asp-model="Model.Ahmet" >
+        </abp-dynamic-form>