我如何使用标签助手在任意元素上获取模型 属性 的名称?
How can I use tag helpers to get a model property's name on an arbitrary element?
ASP.NET核心.
<label asp-for="FooModelProperty">...</label>
这会生成一个具有适当 属性 名称的表单控件。 select、输入等相同
但我需要在某个随机元素上使用该名称,例如一个 div
,所以我可以在 JavaScript 中使用它。问题是 asp-for
标签助手对任意元素不起作用。
那么我该怎么做:
<div asp-for="FooModelProperty">...</div>
ModelExpression
class 的创建是为了帮助处理此类情况。您可以将它作为 属性 添加到您的 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>
ASP.NET核心.
<label asp-for="FooModelProperty">...</label>
这会生成一个具有适当 属性 名称的表单控件。 select、输入等相同
但我需要在某个随机元素上使用该名称,例如一个 div
,所以我可以在 JavaScript 中使用它。问题是 asp-for
标签助手对任意元素不起作用。
那么我该怎么做:
<div asp-for="FooModelProperty">...</div>
ModelExpression
class 的创建是为了帮助处理此类情况。您可以将它作为 属性 添加到您的 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>