Der Fehler bedeutet, dass Sie zu einer Ansicht navigieren, deren Modell als typeof deklariert ist Foo(mithilfe von @model Foo), aber tatsächlich ein Modell übergeben haben, das typeof ist Bar(beachten Sie, dass der Begriff Wörterbuch verwendet wird, weil ein Modell über a an die Ansicht übergeben wird ViewDataDictionary). .
Der Fehler kann verursacht werden durch
Übergeben des falschen Modells von einer Controller-Methode an eine Ansicht (oder Teilansicht)
Häufige Beispiele sind die Verwendung einer Abfrage, mit der ein anonymes Objekt (oder eine Sammlung anonymer Objekte) erstellt und an die Ansicht übergeben wird
var model = db.Foos.Select(x => new
{
ID = x.ID,
Name = x.Name
};
return View(model);
oder Übergeben einer Sammlung von Objekten an eine Ansicht, die ein einzelnes Objekt erwartet
var model = db.Foos.Where(x => x.ID == id);
return View(model);
Der Fehler kann zur Kompilierungszeit leicht identifiziert werden, indem der Modelltyp in der Steuerung explizit deklariert wird, damit er mit dem Modell in der Ansicht übereinstimmt, anstatt ihn zu verwenden var.
Übergabe des falschen Modells von einer Ansicht an eine Teilansicht
Gegeben das folgende Modell
public class Foo
{
public Bar MyBar { get; set; }
}
und dann eine Hauptansicht, die mit deklariert wurde, @model Foound eine Teilansicht, die mit deklariert @model Barwurde
Foo model = db.Foos.Where(x => x.ID == id).Include(x => x.Bar).FirstOrDefault();
return View(model);
kehrt das richtige Modell zur Hauptansicht zurück. Die Ausnahme wird jedoch ausgelöst, wenn die Ansicht enthält
@Html.Partial("_Bar")
Standardmäßig ist das an die Teilansicht übergebene Modell das in der Hauptansicht deklarierte Modell, das Sie verwenden müssen
@Html.Partial("_Bar", Model.MyBar)
um die Instanz von Baran die Teilansicht zu übergeben. Beachten Sie auch, dass, wenn der Wert von MyBaris ist null(nicht initialisiert wurde), standardmäßig Fooan den Teil übergeben wird. In diesem Fall muss dies der Fall sein
@Html.Partial("_Bar", new Bar())
Deklarieren eines Modells in einem Layout
Wenn eine Layoutdatei eine Modelldeklaration enthält, müssen alle Ansichten, die dieses Layout verwenden, dasselbe Modell oder ein Modell deklarieren, das von diesem Modell abgeleitet ist.
Wenn Sie den HTML-Code für ein separates Modell in ein Layout aufnehmen möchten, initialisieren Sie im Layout mit, um @Html.Action(...)eine [ChildActionOnly]Methode aufzurufen , die dieses Modell initialisiert und eine Teilansicht dafür zurückgibt.
return Viewstatt bekommenreturn PartialView, also ist das etwas zu überprüfen