Tag Helper是Asp.Net Core的一个很好的功能。我创建了几个标记助手,它们可以提供超级帮助。
现在我想尝试一些更高级的东西。标记辅助属性具有以属性值是模型属性的方式创建的能力。
这方面的例子如下:
//model
public class MyModel{
public int MyField {get;set;} = 10;
}
//in the view
@model MyModel
...
<input asp-for="MyField" />
在上面的示例中,asp-for
标记的input
标记帮助程序引用了模型中的属性。 documentation表示
asp-for属性值是ModelExpression和lambda表达式的右侧。因此,asp-for =&#34; Property1&#34;成为m =&gt; m.Property1在生成的代码中,这就是为什么你不需要使用模型前缀。
所以这很酷,并且相同的文档似乎称之为&#34;表达式名称&#34;。
如何在我自己的自定义标记助手中创建这样的属性?
答案 0 :(得分:10)
只需在TagHelper中声明ModelExpression
类型的参数,然后使用它来生成内容。
例如:
public class FooTagHelper : TagHelper
{
public ModelExpression For { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
output.Content.SetHtmlContent(
$@"You want the value of property <strong>{For.Name}</strong>
which is <strong>{For.Model}</strong>");
}
}
如果您在以下视图中使用它:
@model TestModel
<foo for="Id"></foo>
<foo for="Val"></foo>
并传递类似new TestModel { Id = "123", Val = "some value" }
的模型,然后您将在视图中获得以下输出(为清晰起见而格式化):
<div>
You want the value of property <strong>Id</strong>
which is <strong>123</strong>
</div>
<div>
You want the value of property <strong>Val</strong>
which is <strong>some value</strong>
</div>