5

我一直在谷歌上查看关于 taghelpers 的示例,但找不到我正在寻找的任何示例。

我有以下代码:

<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 的 taghelper

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

编辑:它与在自定义 taghelper 中存储变量不同,但我想调用其他自定义 taghelper 或现有 taghelpers。

4

1 回答 1

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 的示例代码的存储库:

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

于 2015-11-11T13:34:16.330 回答