首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建TagHelper的值是一个模型属性(不使用@ Model )?

如何创建TagHelper的值是一个模型属性(不使用@ Model )?
EN

Stack Overflow用户
提问于 2017-04-07 19:17:09
回答 1查看 4.1K关注 0票数 9

Tag Helper是Asp.Net核心的可爱特性之一。我已经创建了几个标签助手,它们可以非常有用。

现在我想尝试一些更先进的东西。标记助手属性具有创建的能力,例如属性值是一个模型属性。

这方面的例子如下:

代码语言:javascript
复制
 //model
 public class MyModel{
      public int MyField {get;set;} = 10;
 }



  //in the view
  @model MyModel
   ...
  <input asp-for="MyField" />

在上面的示例中,指向asp-for标记的input标记助手引用了模型中的一个属性。文档

asp-for属性值是lambda表达式的ModelExpression和右侧。因此,asp-for="Property1“在生成的代码中变成m => m.Property1,这就是为什么您不需要使用Model前缀的原因。

因此,这是相当酷的,同样的文档似乎称之为“表达式名称”。

如何在自己的自定义标记助手中创建这样的属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-08 10:56:37

只需将TagHelper中的参数声明为ModelExpression类型,然后使用它生成内容。

例如:

代码语言:javascript
复制
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>");
    }
}

如果您在这样的视图中使用它:

代码语言:javascript
复制
@model TestModel

<foo for="Id"></foo>
<foo for="Val"></foo>

并传递一个类似于new TestModel { Id = "123", Val = "some value" }的模型,然后您将在视图中获得以下输出(为清晰而格式化):

代码语言:javascript
复制
<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>
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43285590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档