Render input tag in abp-input

pull/272/head
yekalkan 8 years ago
parent 15e5d1ddf2
commit 89da8b6bce

@ -30,7 +30,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
return Task.CompletedTask; return Task.CompletedTask;
} }
protected string RenderInputTagHelper(TagHelperAttributeList attributeList, AbpTagHelper abpTagHelper, HtmlEncoder htmlEncoder, string tagName = "div") protected TagHelperOutput GetInnerTagHelper(TagHelperAttributeList attributeList, TagHelper tagHelper, string tagName = "div")
{ {
var innerOutput = new TagHelperOutput(tagName, attributeList, (useCachedResult, encoder) => Task.Run<TagHelperContent>(() => new DefaultTagHelperContent())) var innerOutput = new TagHelperOutput(tagName, attributeList, (useCachedResult, encoder) => Task.Run<TagHelperContent>(() => new DefaultTagHelperContent()))
{ {
@ -39,7 +39,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
var innerContext = new TagHelperContext(attributeList, new Dictionary<object, object>(), Guid.NewGuid().ToString()); var innerContext = new TagHelperContext(attributeList, new Dictionary<object, object>(), Guid.NewGuid().ToString());
abpTagHelper.Process(innerContext, innerOutput); tagHelper.Process(innerContext, innerOutput);
return innerOutput;
}
protected string RenderTagHelper(TagHelperAttributeList attributeList, TagHelper tagHelper, HtmlEncoder htmlEncoder, string tagName = "div")
{
var innerOutput = new TagHelperOutput(tagName, attributeList, (useCachedResult, encoder) => Task.Run<TagHelperContent>(() => new DefaultTagHelperContent()))
{
TagMode = TagMode.SelfClosing
};
var innerContext = new TagHelperContext(attributeList, new Dictionary<object, object>(), Guid.NewGuid().ToString());
tagHelper.Process(innerContext, innerOutput);
return RenderTagHelperOutput(innerOutput, htmlEncoder); return RenderTagHelperOutput(innerOutput, htmlEncoder);
} }

@ -35,8 +35,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
// {"Type", "Text"}, // {"Type", "Text"},
// {"Placeholder", "plcHlder"} // {"Placeholder", "plcHlder"}
//}; //};
//output.Content.AppendHtml(RenderInputTagHelper(attributes, _abpInputTagHelper, _htmlEncoder)); //output.Content.AppendHtml(RenderTagHelper(attributes, _abpInputTagHelper, _htmlEncoder));
} }

@ -1,13 +1,17 @@
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using JetBrains.Annotations;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
{ {
public class AbpInputTagHelper : AbpTagHelper<AbpInputTagHelper, AbpInputTagHelperService>, ITransientDependency public class AbpInputTagHelper : AbpTagHelper<AbpInputTagHelper, AbpInputTagHelperService>, ITransientDependency
{ {
public ModelExpression AspFor { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public AbpInputTagHelper(AbpInputTagHelperService tagHelperService) public AbpInputTagHelper(AbpInputTagHelperService tagHelperService)
: base(tagHelperService) : base(tagHelperService)

@ -1,5 +1,9 @@
using System.Text; using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
@ -7,11 +11,44 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
{ {
public class AbpInputTagHelperService : AbpTagHelperService<AbpInputTagHelper> public class AbpInputTagHelperService : AbpTagHelperService<AbpInputTagHelper>
{ {
private readonly HtmlEncoder _htmlEncoder;
private readonly IHtmlGenerator _generator;
public AbpInputTagHelperService(HtmlEncoder htmlEncoder, IHtmlGenerator generator)
{
_htmlEncoder = htmlEncoder;
_generator = generator;
}
public override void Process(TagHelperContext context, TagHelperOutput output) public override void Process(TagHelperContext context, TagHelperOutput output)
{ {
output.TagName = "input"; output.TagName = "input";
output.Attributes.AddClass("form-control");
output.TagMode = TagMode.SelfClosing; ProcessAttributes(output);
}
protected virtual void ProcessAttributes(TagHelperOutput output)
{
var inputTagHelperOutput = GetAttributes();
foreach (var tagHelperAttribute in inputTagHelperOutput.Attributes)
{
output.Attributes.Add(tagHelperAttribute);
}
output.Attributes.RemoveAll("asp-for");
output.Attributes.Add("class", "form-control");
}
protected virtual TagHelperOutput GetAttributes()
{
var inputTagHelper = new InputTagHelper(_generator)
{
For = TagHelper.AspFor,
ViewContext = TagHelper.ViewContext
};
return GetInnerTagHelper(new TagHelperAttributeList(), inputTagHelper);
} }
} }
} }

@ -12,24 +12,53 @@
<div class="demo-with-code"> <div class="demo-with-code">
<div class="demo-area"> <div class="demo-area">
<abp-form-group> <form method="post" action="#">
<abp-input type="text"/> <abp-form-group>
</abp-form-group> <abp-input asp-for="@Model.Name" />
<abp-form-group checkbox="true"> </abp-form-group>
<input type="checkbox" class="form-check-input" id="exampleCheck1"> <abp-form-group>
<label class="form-check-label" for="exampleCheck1">Check me out</label> <abp-input asp-for="@Model.Password" />
</abp-form-group> </abp-form-group>
<abp-form-group>
<abp-input asp-for="@Model.PhoneNumber" />
</abp-form-group>
<abp-form-group>
<abp-input asp-for="@Model.EmailAddress" />
</abp-form-group>
<abp-form-group>
<abp-input asp-for="@Model.Count" />
</abp-form-group>
<abp-form-group>
<abp-input asp-for="@Model.Day" />
</abp-form-group>
<abp-form-group>
<abp-input asp-for="@Model.IsActive" />
</abp-form-group>
</form>
</div> </div>
<div class="code-area"> <div class="code-area">
<pre> <pre>
&lt;abp-form-group&gt; &lt;abp-form-group&gt;
&lt;abp-input type=&quot;text&quot;/&gt; &lt;abp-input asp-for=&quot;@Model.Name&quot; /&gt;
&lt;/abp-form-group&gt; &lt;/abp-form-group&gt;
&lt;abp-form-group checkbox=&quot;true&quot;&gt; &lt;abp-form-group&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;form-check-input&quot; id=&quot;exampleCheck1&quot;&gt; &lt;abp-input asp-for=&quot;@Model.Password&quot; /&gt;
&lt;label class=&quot;form-check-label&quot; for=&quot;exampleCheck1&quot;&gt;Check me out&lt;/label&gt; &lt;/abp-form-group&gt;
&lt;abp-form-group&gt;
&lt;abp-input asp-for=&quot;@Model.PhoneNumber&quot; /&gt;
&lt;/abp-form-group&gt;
&lt;abp-form-group&gt;
&lt;abp-input asp-for=&quot;@Model.EmailAddress&quot; /&gt;
&lt;/abp-form-group&gt;
&lt;abp-form-group&gt;
&lt;abp-input asp-for=&quot;@Model.Count&quot; /&gt;
&lt;/abp-form-group&gt;
&lt;abp-form-group&gt;
&lt;abp-input asp-for=&quot;@Model.Day&quot; /&gt;
&lt;/abp-form-group&gt;
&lt;abp-form-group&gt;
&lt;abp-input asp-for=&quot;@Model.IsActive&quot; /&gt;
&lt;/abp-form-group&gt; &lt;/abp-form-group&gt;
</pre> </pre>
</div> </div>
</div> </div>

@ -1,9 +1,39 @@
using Microsoft.AspNetCore.Mvc.RazorPages; using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components
{ {
public class FormsModel : PageModel public class FormsModel : PageModel
{ {
[Required]
[DisplayName("Name")]
public string Name = "MyName";
[Required]
[EmailAddress]
[DisplayName("Email")]
public string EmailAddress = "info@volosoft.com";
[DisplayName("Password")]
[DataType(DataType.Password)]
public string Password = "MyPass";
[Phone]
[DisplayName("Phone Number")]
public string PhoneNumber = "05069231382";
[DisplayName("Count")]
public int Count = 42;
[DataType(DataType.Date)]
[DisplayName("Day")]
public DateTime Day = DateTime.Today;
[DisplayName("Is Active")]
public bool IsActive = true;
public void OnGet() public void OnGet()
{ {

Loading…
Cancel
Save