Ich habe folgende 2 Einheiten:Validierung von Viewmodel verschachtelte Domain-Objekte enthalten
public class Product
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
[Key]
public int ID { get; set; }
[Required]
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
und eine Ansicht Modell
public class ProductCreateOrEditViewModel
{
public Product Product { get; set; }
public IEnumerable<Category> Categories { get; set; }
}
Die Ansicht erstellen für Produkte dieses Ansichtsmodell verwendet. Die Kategorie-ID wird eingestellt, wie in der Ansicht folgt:
<div class="editor-field">
@Html.DropDownListFor(model => model.Product.Category.ID,new SelectList
(Model.Categories,"ID","Name"))
@Html.ValidationMessageFor(model => model.Product.Category.ID)
</div>
Wenn die Form Beiträge ich eine Instanz der View-Modell erhalten mit einem Produkt und der gewählten Kategorie Objekt gesetzt, aber da die Eigenschaft „Name“ der Kategorie verfügt über ein [Erforderlich] -Attribut Der ModelState ist nicht gültig.
Soweit ein Produkt erstellen geht, brauche ich nicht oder kümmern Sie sich um die Eigenschaft "Name". Wie kann ich die Modellbindung so einrichten, dass sie nicht als ModelState-Fehler gemeldet wird?
Sinnvoll, der einzige Nebeneffekt ist, dass Sie die Modellvalidierung für alle Ansichtsmodellklassen duplizieren müssten, oder gibt es dafür einen empfohlenen Ansatz? –
Sie werden am Ende zwei Validierungslayer haben. Eine "clientseitige" über Viewmodel und eine "serverseitige" über Ihre Business-Logik-Ebene, wie es sein sollte – Iridio