如何使用标签助手来获取任意元素上的模型属性名称?

gro*_*kky 3 c# asp.net asp.net-core-mvc tag-helpers asp.net-core

ASP.NET 核心。

 <label asp-for="FooModelProperty">...</label>
Run Code Online (Sandbox Code Playgroud)

这会生成一个具有适当属性名称的表单控件。选择、输入等也是如此。

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

那么我该怎么做这样的事情:

<div asp-for="FooModelProperty">...</div>
Run Code Online (Sandbox Code Playgroud)

Wil*_*Ray 6

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Razor 中使用时如下所示:

<div na-for="MyProperty"></div>
Run Code Online (Sandbox Code Playgroud)

它将输出:

<div data-property-name="MyProperty"></div>
Run Code Online (Sandbox Code Playgroud)