2016-12-19 6 views
0

Gibt es eine Möglichkeit, eine Unterklasse über das Attribut aufzulisten?WhiteList-Unterklasse via Bind

public class VoteQuestionViewModel 
{ 
    [Display(Name = "Vote Question")] 
    public string Name { get; set; } 

    public VoteTypeViewModel VoteType { get; set; } 

}

public class VoteTypeViewModel 
{ 
    public int Id { get; set; } 

    [Display(Name = "Type of Question")] 
    public string Type { get; set; } 

    [Display(Name = "Description")] 
    public string Description { get; set; } 
} 

Die unten wird nur auf weiße Liste Klasseneigenschaft arbeiten, aber es wird keine Kinder Klasse Eigenschaft arbeiten, um die weiße Liste:

public async Task<IActionResult> Create([Bind("Name, VoteType.Description")] VoteQuestionViewModel voteQuestion) 

Antwort

1

Die Methode, die Sie in inbegriffen Ihre Frage ist der einzige Weg. Bindung funktioniert bei gebuchten Werten. Mit anderen Worten, es werden die Schlüsselnamen in den Formulardaten betrachtet. In dieser Hinsicht gibt es keinen Schlüssel VoteType und wird nie: nur die Eigenschaften für diese Klasse, die gebucht wurden, d. H. VoteType.Description.

Das heißt, es ist nicht nur extrem schlecht, Bind überhaupt zu verwenden, aber es in Verbindung mit Ansicht Modelle macht absolut keinen Sinn. Der ganze Sinn von Bind ist es, Ihnen zu erlauben, eine Teilmenge von Eigenschaften für eine Entitätsklasse ein- oder auszuschließen. Ebenso besteht der Zweck eines Ansichtsmodells darin, nur mit den Daten zu arbeiten, mit denen die Ansicht arbeiten muss. Wenn Sie also nicht möchten, dass eine Eigenschaft in den Beitrag aufgenommen wird, geben Sie nicht in das Ansichtsmodell ein. Selbst dann haben Ansichtsmodelle die zusätzliche Einschränkung, dass Daten zu/von der Entitätsklasse auf sie abgebildet werden müssen. Das gibt Ihnen die Möglichkeit, explizit zu entscheiden, was gemappt wird und was nicht. Wenn Sie beispielsweise aus irgendeinem Grund in Ihrer Ansicht Id benötigen, aber nicht möchten, dass der Benutzer sie ändern kann, ordnen Sie ihn nicht einfach aus Ihrem Ansichtsmodell auf Ihre Entität zurück.

+0

Gute Punkte. Am Ende werde ich die Bindungsfunktion los. Ich habe ein zusätzliches ViewModel erstellt, das nur für diese Ansicht bestimmt ist, und dann AutoMapper verwendet, um das endgültige Modell zu füllen. – lucas