2017-04-07 10 views
2

タグヘルパーは、Asp.Net Coreの魅力的な機能の1つです。私はいくつかのタグヘルパーを作成し、彼らは非常に役立つことができます。@Modelを使用せずに値をModelHelperにするTagHelperの作成方法は?

もう少し先進的なものを試してみたいと思います。タグヘルパーアトリビュートは、アトリビュート値がモデルプロパティであるように作成することができます。

そして、これの例は、以下である:上記の例で

//model 
public class MyModel{ 
     public int MyField {get;set;} = 10; 
} 



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

モデルからinputタグ向けの参照プロパティのasp-forタグヘルパー。 documentationはそれが

と言っています。asp-for属性の値は、ModelExpressionとラムダ式の右辺です。したがって、Asp-for = "Property1"は、生成されたコードでm => m.Property1になります。なぜなら、Modelの前に置く必要がないからです。

これはとてもクールで、同じ文書がこれを「表現名」と呼んでいるようです。

独自のカスタムタグヘルパーでこのようなプロパティを作成する方法を教えてください。

答えて

3

ジャストタイプModelExpressionのとしてあなたTagHelperでパラメータを宣言して、コンテンツを生成するためにそれを使用。例えば

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

関連する問題