2016-04-30 11 views
0
erforderlich.

Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen über den Ursprung und den Ort der Ausnahme können anhand der folgenden Ausnahme-Stack-Trace identifiziert werden.ASP.NET MVC 5 Das an das Wörterbuch übergebene Modellelement ist vom Typ 'Name.Models.IndexViewModel', aber für dieses Wörterbuch ist ein Modellelement vom Typ

Stapelüberwachung:

InvalidOperationException: Das Element-Modell in das Wörterbuch übergeben vom Typ ‚Name.Models.IndexViewModel‘, aber dieses Wörterbuch ein Modell Artikel vom Typ erfordert ‚Name.Models.TwoViewModel ".

brauchte ich zwei verschiedene Ansichtsmodelle für diese Ansicht:

public class TwoViewModel 
{ 
    public IEnumerable<Name.Models.Project> Model1 { get; set; } 
    public IndexViewModel Model2 { get; set; } 
} 

EDIT:

Ich denke, dass ich gefunden habe, wo die Probleme kommen, die ManageController:

public async Task<ActionResult> Index(ManageMessageId? message) 
{ 
    var userId = User.Identity.GetUserId(); 
    var userEmail = User.Identity.Name; 
    var user = UserManager.FindById(userId); 
    var model = new IndexViewModel 
    {    
     Email = user.Email, 
     FirstName = user.FirstName, 
     LastName = user.LastName, 
     City = user.City,    
    };  
    return View(model); 
} 

Ich habe versucht, das ViewModel des Modells zu ändern, Dinge wie

0 versuchen
var model = new TwoViewModel 
{ 
    Model2.Email = user.Email, 
    Model2.FirstName = uesr.FirstName, 
    Model2.LastName = user.LastName, 
    Model2.City = user.City,      
};    
return View(model); 

Und intellisense erkennt das Model2, aber nicht den E-Mail-Teil. Ich denke, eine Verschachtelung wäre der Fall?

Ich habe diesen Ansatz versucht:

var model = new TwoViewModel 
{ 
    Model2 = new IndexViewModel 
    { 
     Email = user.Email, 
     FirstName = user.FirstName, 
     LastName = user.LastName, 
     City = user.City, 
    } 
};  
return View(model); 

Aber dann gibt eine andere Sache, eine

Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Fehler.

@foreach (var item in Model.Model1) 
{ 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.Title)</td> 
     .... 
    </tr> 
} 

Diese @foreach (var item in Model.Model1) Linie ist die Ursache des Problems. Jetzt ist die Syntax gut. Ich habe die gleiche Zeile, die alles aus dem ersten Modell (IEnumerable<Name.Models.Project>) ohne Probleme abrufen wird. Ich kann nicht mit diesem Fehler umgehen

EDIT: Die Lösung war, dass ich Model1 innerhalb des Modells des Typs TwoViewModel innerhalb des ManageController initialisieren musste. Dies behebt meinen Fehler

+0

[Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve) –

+0

Die Fehlermeldung ist selbsterklärend.Sie haben eine Ansicht mit '@model TwoViewModel', aber irgendwo übergeben Sie ein Modell an diese Ansicht, die' IndexViewModel' ist. –

+0

Okay, ich werde den ganzen Code hinzufügen, um das Problem reproduzieren zu können. – crystyxn

Antwort

0

Die Ursache für das Problem war, dass das Modell 1 nicht initialisiert wurde und so war es ein NULL.

Die Lösung war, dass ich Model1 innerhalb des Modells des Typs TwoViewModel innerhalb des ManageController initialisieren musste. Das behebt meinen Fehler