繁体   English   中英

如何使用标记帮助器在任意元素上获取模型属性的名称?

[英]How can I use tag helpers to get a model property's name on an arbitrary element?

ASP.NET核心。

 <label asp-for="FooModelProperty">...</label>

这将生成具有适当属性名称的表单控件。 选择,输入等相同

但我需要在一些随机元素上使用该名称,例如div ,所以我可以在JavaScript中使用它。 问题是asp-for标签助手不适用于任意元素。

那我怎么做这样的事情:

<div asp-for="FooModelProperty">...</div>

创建ModelExpression类是为了帮助处理这些情况。 您可以将其作为属性添加到TagHelper,并从那里访问属性名称。

这是一个例子:

[HtmlTargetElement("*", Attributes = forName)]
public class NameAppenderTagHelper : TagHelper
{
    private const string forName = "na-for";

    [HtmlAttributeName(forName)]
    public ModelExpression PropertyName { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        // add the property name as an attribute to the element
        output.Attributes.Add("data-property-name", PropertyName.Name);

        // if you'd like the [Display] name value, you can use this:
        // output.Attributes.Add("data-property-name", PropertyName.Metadata.DisplayName);
        base.Process(context, output);
    }
}

在Razor中使用时,如下所示:

<div na-for="MyProperty"></div>

它将输出:

<div data-property-name="MyProperty"></div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM