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;
}
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()))
{
@ -39,7 +39,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
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);
}

@ -35,8 +35,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
// {"Type", "Text"},
// {"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 JetBrains.Annotations;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
{
public class AbpInputTagHelper : AbpTagHelper<AbpInputTagHelper, AbpInputTagHelperService>, ITransientDependency
{
public ModelExpression AspFor { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public AbpInputTagHelper(AbpInputTagHelperService tagHelperService)
: base(tagHelperService)

@ -1,5 +1,9 @@
using System.Text;
using System.Text.Encodings.Web;
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 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>
{
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)
{
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-area">
<abp-form-group>
<abp-input type="text"/>
</abp-form-group>
<abp-form-group checkbox="true">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</abp-form-group>
<form method="post" action="#">
<abp-form-group>
<abp-input asp-for="@Model.Name" />
</abp-form-group>
<abp-form-group>
<abp-input asp-for="@Model.Password" />
</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 class="code-area">
<pre>
&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 checkbox=&quot;true&quot;&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;form-check-input&quot; id=&quot;exampleCheck1&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-input asp-for=&quot;@Model.Password&quot; /&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;
</pre>
</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
{
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()
{

Loading…
Cancel
Save