diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index 8f687e6932..954619733b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -120,21 +120,41 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var inputTagHelperOutput = GetInnerTagHelper(GetInputAttributes(context, output), context, tagHelper, "input"); ConvertToTextAreaIfTextArea(inputTagHelperOutput); + AddDisabledAttribute(inputTagHelperOutput); + AddReadOnlyAttribute(inputTagHelperOutput); + AddAutoFocusAttribute(inputTagHelperOutput); + isCheckbox = IsInputCheckbox(context, output, inputTagHelperOutput.Attributes); + inputTagHelperOutput.Attributes.AddClass(isCheckbox ? "form-check-input" : "form-control"); - if (TagHelper.IsDisabled && !inputTagHelperOutput.Attributes.ContainsName("disabled")) - { - inputTagHelperOutput.Attributes.Add("disabled", "true"); - } + return inputTagHelperOutput; + } + protected virtual void AddAutoFocusAttribute(TagHelperOutput inputTagHelperOutput) + { if (TagHelper.AutoFocus && !inputTagHelperOutput.Attributes.ContainsName("data-auto-focus")) { inputTagHelperOutput.Attributes.Add("data-auto-focus", "true"); } + } - isCheckbox = IsInputCheckbox(context, output, inputTagHelperOutput.Attributes); - inputTagHelperOutput.Attributes.AddClass(isCheckbox ? "form-check-input" : "form-control"); + protected virtual void AddDisabledAttribute(TagHelperOutput inputTagHelperOutput) + { + var disabledAttribute = GetAttribute(TagHelper.AspFor.ModelExplorer); - return inputTagHelperOutput; + if (disabledAttribute != null && !inputTagHelperOutput.Attributes.ContainsName("disabled")) + { + inputTagHelperOutput.Attributes.Add("disabled", ""); + } + } + + protected virtual void AddReadOnlyAttribute(TagHelperOutput inputTagHelperOutput) + { + var readOnlyAttribute = GetAttribute(TagHelper.AspFor.ModelExplorer); + + if (readOnlyAttribute != null && !inputTagHelperOutput.Attributes.ContainsName("readonly")) + { + inputTagHelperOutput.Attributes.Add("readonly", ""); + } } protected virtual bool IsInputCheckbox(TagHelperContext context, TagHelperOutput output, TagHelperAttributeList attributes) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 793ee5aa00..8607348fff 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -71,10 +71,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var inputTagHelperOutput = GetInnerTagHelper(new TagHelperAttributeList(), context, selectTagHelper, "select", TagMode.StartTagAndEndTag); inputTagHelperOutput.Attributes.Add("class", "form-control"); + AddDisabledAttribute(inputTagHelperOutput); return inputTagHelperOutput; } + protected virtual void AddDisabledAttribute(TagHelperOutput inputTagHelperOutput) + { + var disabledAttribute = GetAttribute(TagHelper.AspFor.ModelExplorer); + + if (disabledAttribute != null && !inputTagHelperOutput.Attributes.ContainsName("disabled")) + { + inputTagHelperOutput.Attributes.Add("disabled", ""); + } + } + protected virtual List GetSelectItems(TagHelperContext context, TagHelperOutput output) { var selectItems = TagHelper.AspItems?.ToList(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DisabledInput.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DisabledInput.cs new file mode 100644 index 0000000000..f43754cc22 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DisabledInput.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form +{ + [AttributeUsage(AttributeTargets.Property)] + public class DisabledInput : Attribute + { + public DisabledInput() + { + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/ReadOnlyInput.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/ReadOnlyInput.cs new file mode 100644 index 0000000000..6cef8594b3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/ReadOnlyInput.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form +{ + [AttributeUsage(AttributeTargets.Property)] + public class ReadOnlyInput : Attribute + { + public ReadOnlyInput() + { + } + } +}