2017-04-07 76 views
2

Tag Helper's是Asp.Net Core的甜蜜功能之一。我創建了幾個標籤助手,他們可以超級有用。如何創建TagHelper誰是模型屬性(不使用@Model)?

現在我想嘗試一些更先進的東西。標籤助手屬性能夠以屬性值是模型屬性的方式創建。

和實施例,這是以下內容:

//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 =「Property1」變爲m => m.Property1,這就是爲什麼您不需要以Model爲前綴的原因。

所以這很酷,而且相同的文檔似乎稱這爲「表達式名稱」。

如何在我自己的自定義標籤助手中創建這樣的屬性?

回答

3

只需在您的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(
[email protected]"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> 
+0

這是可能的整個對象? – Jeroen

相關問題