2016-08-29 4 views
2

ASP.NET Kern benutzerdefinierten Tag Helfer eingeführt, die in Ansichten wie diese verwendet werden können:Erhalten Eigenschaftsnamen in Tag Helper

<country-select value="CountryCode" /> 

Aber ich verstehe nicht, wie kann ich Modell Eigenschaftsnamen in meinem Unterricht bekommen :

public class CountrySelectTagHelper : TagHelper 
{ 
    [HtmlAttributeName("value")] 
    public string Value { get; set; } 

    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     ... 
     // Should return property name, which is "CountryCode" in the above example 
     var propertyName = ???(); 
     base.Process(context, output); 
    } 
} 

In der vorherigen Version I dieses ModelMetadata unter Verwendung war in der Lage zu tun:

var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
var property = metadata.PropertyName; // return "CountryCode" 

Wie kann ich das gleiche in den neuen ASP.NET Tag Helfern machen?

+0

Warum verwenden Sie nicht die Eigenschaft "Wert"? –

Antwort

1

Sie können eine Zeichenfolge über das Tag-Helper-Attribut übergeben.

<country-select value="@Model.CountryCode" /> 

Die Value Eigenschaft wird durch das Voranstellen @ mit dem Wert von Model.CountryCode von Razor bestückt werden. Sie erhalten also den Wert direkt, ohne den Namen einer Modelleigenschaft zu übergeben und danach darauf zuzugreifen.

4

Um eine Immobilie zu erhalten, sollten Sie ModelExpression in Ihrer Klasse verwenden statt:

public class CountrySelectTagHelper : TagHelper 
{ 
    public ModelExpression For { get; set; } 

    public override void Process(TagHelperContext context, TagHelperOutput output) 
    { 
     var propertyName = For.Metadata.PropertyName; 
     var value = For.Model as string; 

     ... 

     base.Process(context, output); 
    } 
} 
+0

Funktioniert für mich. Vergessen Sie nicht, dem TagHelper in der Razor-Ansicht das Attribut "for" hinzuzufügen. –

0

Ich bin nicht sicher, ob Sie bekommen, was Sie wollten. Wenn Sie versuchen, das vollständige Modell von der Ansicht an den benutzerdefinierten Tag-Helfer zu übergeben, ist dies, wie ich es tue.

Sie können Ihr aktuelles Modell mit beliebigen benutzerdefinierten Attributen aus der Ansicht übernehmen. Siehe das Beispiel unten. Ihr Modell Unter der Annahme Country

public class Country 
{ 
    public string Name { get; set; } 
    public string Code { get; set; } 

} 

Jetzt eine Eigenschaft in Ihrem benutzerdefinierten Tag Helfer des gleichen Typs deklarieren.

public Country CountryModel { get; set; } 

Ihr Controller würde in etwa so aussehen

public IActionResult Index() 
{ 
    var country= new Country 
    { 
     Name = "United States", 
     Code = "USA" 
    }; 

    return View("Generic", country); 
} 

In diesem Setup Ihr ​​Modell in der taghelper zuzugreifen, ist es wie jedes andere benutzerdefinierte Attribut übergeben in/property

Ihre Ansicht sollte jetzt so etwas wie das aussehen

<country-select country-model="@Model"></country-select> 

Sie können es erhalten i n Ihr Tag Helper wie jede andere Klasseneigenschaft

public override void Process(TagHelperContext context, TagHelperOutput output) 
{ 
    ... 
    // Should return property name, which is "CountryCode" in the above example 
    var propertyName = CountryModel.Name; 
    base.Process(context, output); 
} 

Happy Codierung!

Verwandte Themen