【发布时间】:2018-10-01 01:47:44
【问题描述】:
我是 Asp.Net Core 的新手,但在使用 Tag Helpers 时遇到问题。
我正在尝试为 2 个场景创建标签助手: - 输入组 - 复选框
当我从一个 asp-for 标签开始时,我构建其他标签没有问题,但我不知道如何构建“智能”标签,例如带有 asp-for 字段和所有验证的输入标签。
这是我正在尝试构建的内容:
输入组
<div class="input-group">
<input class="form-control" placeholder="Search" type="text" data-val="true" data-val-maxlength="Max value" data-val-maxlength-max="5" id="SearchText" name="SearchText" value="" maxlength="5">
<span class="input-group-append"><button class="btn btn-light" id="myButtonId" type="button">Search</button></span>
</div>
这就是我现在拥有的:
<div class="input-group">
<input asp-for="SearchText" class="form-control" placeholder="Buscar" add-on-button="myButtonId" add-on-append="true" />
</div>
这是标签助手
[HtmlTargetElement("input", Attributes = "add-on-button,add-on-append", ParentTag = "div")]
public class TextBoxButtonHelper : TagHelper
{
public string AddOnButton { get; set; }
public bool AddOnAppend { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var tagAddOn = new TagBuilder("span");
tagAddOn.AddCssClass(AddOnAppend ? "input-group-append" : "input-group-prepend");
var tagButton = new TagBuilder("button");
tagButton.Attributes.Add("id", AddOnButton);
tagButton.Attributes.Add("class", "btn btn-light");
tagButton.Attributes.Add("type", "button");
tagButton.InnerHtml.Append(context.AllAttributes["placeholder"]?.Value.ToString());
tagAddOn.InnerHtml.AppendHtml(tagButton);
if (AddOnAppend)
output.PostElement.AppendHtml(tagAddOn);
else
output.PreElement.AppendHtml(tagAddOn);
}
}
我想要的是这样的:
<input-tag asp-for="SearchText" class="form-control" placeholder="Buscar" button="myButtonId" append="true" />
所以只有一个标签可以生成所有代码,但我不知道如何在标签助手中生成“TextBoxFor”。
复选框 与 chechbox 相同的问题,我只需要从一个标签创建它:
<div class="custom-control custom-control-primary custom-checkbox">
<input class="custom-control-input" data-val="true" data-val-required="The SearchActive field is required." id="SearchActive" name="SearchActive" type="checkbox" value="true">
<label class="custom-control-label" for="SearchActive">Solo activos</label>
<input name="SearchActive" type="hidden" value="false">
</div>
感谢您的帮助...
【问题讨论】:
标签: asp.net asp.net-core asp.net-core-tag-helpers