Ron*_*n C 5 c# asp.net-core-mvc tag-helpers
Tag Helper是Asp.Net Core的一个很好的功能.我创建了几个标记助手,它们可以提供超级帮助.
现在我想尝试一些更高级的东西.标记辅助属性具有以属性值是模型属性的方式创建的能力.
这方面的例子如下:
 //model
 public class MyModel{
      public int MyField {get;set;} = 10;
 }
  //in the view
  @model MyModel
   ...
  <input asp-for="MyField" />
Run Code Online (Sandbox Code Playgroud)
在上面的示例asp-for中,input标记定向的标记帮助程序引用模型中的属性.该文件说,
asp-for属性值是ModelExpression和lambda表达式的右侧.因此,asp-for ="Property1"在生成的代码中变为m => m.Property1,这就是为什么你不需要使用模型前缀的原因.
所以这很酷,并且相同的文档似乎称之为"表达式名称".
如何在我自己的自定义标记帮助器中创建这样的属性?
Dan*_*.G. 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>");
    }
}
Run Code Online (Sandbox Code Playgroud)
如果你在这样的视图中使用它:
@model TestModel
<foo for="Id"></foo>
<foo for="Val"></foo>
Run Code Online (Sandbox Code Playgroud)
然后传递一个模型,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>
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2209 次  |  
        
|   最近记录:  |