Browse Source

Text Area Tag helper added

pull/400/head
Yunus Emre Kalkan 8 years ago
parent
commit
d34f7e7441
  1. 5
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs
  2. 54
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs
  3. 19
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/TextArea.cs
  4. 1
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/DynamicForms.cshtml.cs

5
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs

@ -95,7 +95,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
protected virtual T GetAttribute<T>(ModelExplorer property) where T : Attribute protected virtual T GetAttribute<T>(ModelExplorer property) where T : Attribute
{ {
return property?.Metadata?.ContainerType?.GetTypeInfo()?.GetProperty(property.Metadata.PropertyName)?.GetCustomAttribute<T>(); var x = property?.Metadata?.ContainerType?.GetTypeInfo();
var y = x.GetProperty(property.Metadata.PropertyName);
var z = y.GetCustomAttribute<T>();
return z;
} }
protected virtual List<FormGroupItem> GetFormGroupContentsList(TagHelperContext context, out bool surpress) protected virtual List<FormGroupItem> GetFormGroupContentsList(TagHelperContext context, out bool surpress)

54
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs

@ -48,7 +48,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
protected virtual string GetFormInputGroupAsHtml(TagHelperContext context, TagHelperOutput output, out bool isCheckbox) protected virtual string GetFormInputGroupAsHtml(TagHelperContext context, TagHelperOutput output, out bool isCheckbox)
{ {
var inputTag = GetInputTag(context, output, out isCheckbox); var inputTag = GetInputTagHelperOutput(context, output, out isCheckbox);
var inputHtml = RenderTagHelperOutput(inputTag, _encoder); var inputHtml = RenderTagHelperOutput(inputTag, _encoder);
var label = GetLabelAsHtml(context, output, inputTag, isCheckbox); var label = GetLabelAsHtml(context, output, inputTag, isCheckbox);
@ -92,15 +92,33 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
"</div>"; "</div>";
} }
protected virtual TagHelperOutput GetInputTag(TagHelperContext context, TagHelperOutput output, out bool isCheckbox) protected virtual TagHelper GetInputTagHelper(TagHelperContext context, TagHelperOutput output)
{ {
var inputTagHelper = new InputTagHelper(_generator) var textAreaAttribute = GetAttribute<TextArea>(TagHelper.AspFor.ModelExplorer);
if (textAreaAttribute != null)
{
return new TextAreaTagHelper(_generator)
{
For = TagHelper.AspFor,
ViewContext = TagHelper.ViewContext
};
}
return new InputTagHelper(_generator)
{ {
For = TagHelper.AspFor, For = TagHelper.AspFor,
ViewContext = TagHelper.ViewContext ViewContext = TagHelper.ViewContext
}; };
}
var inputTagHelperOutput = GetInnerTagHelper(new TagHelperAttributeList(), context, inputTagHelper, "input"); protected virtual TagHelperOutput GetInputTagHelperOutput(TagHelperContext context, TagHelperOutput output, out bool isCheckbox)
{
var tagHelper = GetInputTagHelper(context, output);
var inputTagHelperOutput = GetInnerTagHelper(new TagHelperAttributeList(), context, tagHelper, "input");
ConvertToTextAreaIfTextArea(inputTagHelperOutput);
if (TagHelper.IsDisabled && !inputTagHelperOutput.Attributes.ContainsName("disabled")) if (TagHelper.IsDisabled && !inputTagHelperOutput.Attributes.ContainsName("disabled"))
{ {
@ -125,16 +143,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
protected virtual string GetLabelAsHtml(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag, bool isCheckbox) protected virtual string GetLabelAsHtml(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag, bool isCheckbox)
{ {
if (inputTag.Attributes.Any(a=>a.Name.ToLowerInvariant() == "type" && a.Value.ToString().ToLowerInvariant() == "hidden")) if (inputTag.Attributes.Any(a => a.Name.ToLowerInvariant() == "type" && a.Value.ToString().ToLowerInvariant() == "hidden"))
{ {
return ""; return "";
} }
if (string.IsNullOrEmpty(TagHelper.Label)) if (string.IsNullOrEmpty(TagHelper.Label))
{ {
return GetLabelAsHtmlUsingTagHelper(context,output,isCheckbox); return GetLabelAsHtmlUsingTagHelper(context, output, isCheckbox);
} }
var checkboxClass = isCheckbox ? "class=\"form-check-label\" " : ""; var checkboxClass = isCheckbox ? "class=\"form-check-label\" " : "";
return "<label " + checkboxClass + GetIdAttributeAsString(inputTag) + ">" return "<label " + checkboxClass + GetIdAttributeAsString(inputTag) + ">"
@ -159,5 +177,27 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
return RenderTagHelper(attributeList, context, labelTagHelper, _encoder, "label", TagMode.StartTagAndEndTag, true); return RenderTagHelper(attributeList, context, labelTagHelper, _encoder, "label", TagMode.StartTagAndEndTag, true);
} }
protected virtual void ConvertToTextAreaIfTextArea(TagHelperOutput tagHelperOutput)
{
var textAreaAttribute = GetAttribute<TextArea>(TagHelper.AspFor.ModelExplorer);
if (textAreaAttribute == null)
{
return;
}
tagHelperOutput.TagName = "textarea";
tagHelperOutput.TagMode = TagMode.StartTagAndEndTag;
tagHelperOutput.Content.SetContent(TagHelper.AspFor.ModelExplorer.Model.ToString());
if (textAreaAttribute.Rows>0)
{
tagHelperOutput.Attributes.Add("rows", textAreaAttribute.Rows);
}
if (textAreaAttribute.Cols > 0)
{
tagHelperOutput.Attributes.Add("cols", textAreaAttribute.Cols);
}
}
} }
} }

19
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/TextArea.cs

@ -0,0 +1,19 @@
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 TextArea : Attribute
{
public int Rows { get; set; } = -1;
public int Cols { get; set; } = -1;
public TextArea()
{
}
}
}

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

@ -47,6 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
{ {
[Required] [Required]
[DisplayName("Name")] [DisplayName("Name")]
[TextArea]
public string Name { get; set; } public string Name { get; set; }
[Required] [Required]

Loading…
Cancel
Save