如何编写包含其他标记帮助程序的自定义ASP.NET 5标记帮助程序

时间:2015-11-11 11:02:34

标签: asp.net-core asp.net-core-mvc tag-helpers

我一直在谷歌上查看关于标记主题的示例,但无法找到我正在寻找的任何示例。

我有以下代码:

<div class="form-group">
    <label asp-for="PersonName" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="PersonName" class="form-control" />
        <span asp-validation-for="PersonName" class="text-danger"></span>
    </div>
</div>

我要做的就是用

之类的东西替换它
<bootstraprow asp-for="PersonName"></bootstraprow>

但是我不确定要写一个包含其他标记的taghelper

  1. 有可能吗?
  2. 如果可能,请提供上述
  3. 的代码示例

    修改:与在自定义标记中存储variables不同,但我想调用其他自定义标记或现有标记。

1 个答案:

答案 0 :(得分:2)

如果我们检查您拥有的内容,您使用的唯一属性是PersonName。至于标记本身,其他一切都是很好的旧HTML。

所以你不需要更换任何东西。你需要的是拥有一个依赖于IHtmlGenerator的构造函数。这将自动注入,您将能够根据您的模型生成不同的标签。

相关IHtmlGenerator签名:

public interface IHtmlGenerator
{
    ...

    TagBuilder GenerateValidationMessage(
        ViewContext viewContext,
        string expression,
        string message,
        string tag,
        object htmlAttributes);
    TagBuilder GenerateLabel(
        ViewContext viewContext,
        ModelExplorer modelExplorer,
        string expression,
        string labelText,
        object htmlAttributes);
    TagBuilder GenerateTextBox(
        ViewContext viewContext,
        ModelExplorer modelExplorer,
        string expression,
        object value,
        string format,
        object htmlAttributes);
    ...
}

那就是它!

这里有一些代码可以捕获基本标记:

[HtmlTargetElement("bootstraprow")]
public BootstrapRowTagHelper: TagHelper
{
    protected IHtmlGenerator Generator { get; set; }
    public InputTagHelper(IHtmlGenerator generator)
    {
        Generator = generator;
    }

    [HtmlAttributeName("asp-for")]
    public ModelExpression For { get; set; }

    [HtmlAttributeNotBound]
    [ViewContext]
    public ViewContext ViewContext { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        //todo: write your html generating code here.
    }
}

这是一个包含从TagHelpers生成Bootstrap HTML的示例代码的repo:

https://github.com/dpaquette/TagHelperSamples/blob/master/TagHelperSamples/src/TagHelperSamples.Bootstrap/