MVC: Le modèle de l'élément passé dans le dictionnaire est de type X, mais ce dictionnaire nécessite un élément de modèle de type X
Je suis à l'aide de modèle EF de la première et de l'aide viewmodel dans MVC, j'ai des problèmes avec cette erreur:
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[NKI3.Models.Question]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[NKI3.ViewModels.IndexCreateViewModel]'.
C'est mon viewmodel:
public class IndexCreateViewModel
{
public string QuestionText { get; set; }
public string Sname { get; set; }
public string Cname {get;set;}
}
C'est mon Action dans mon controller:
public ActionResult Index()
{
var Q = db.Question.Include(a => a.SubjectType).Include(a => a.CoreValue);
return View(Q.ToList());
}
Voici ma fortement typé vue:
@model IEnumerable<NKI3.ViewModels.IndexCreateViewModel>
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
QuestionText
</th>
<th>
Sname
</th>
<th>
Cname
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.QuestionText)
</td>
<td>
@Html.DisplayFor(modelItem => item.Sname)
</td>
<td>
@Html.DisplayFor(modelItem => item.Cname)
</td>
</tr>
}
</table>
Je ne semble pas trouver la solution pour ce faire, dois-je retourner mon viewmodel à l'intérieur du contrôleur de l'action de l'index? Toute aide est appréciée.
Merci d'avance!
En Ce Qui Concerne Meilleur!
Il ressemble db.Question renvoie NKI3.Modèles.Question plutôt que de le ViewModel vous montrer ci-dessus.
OriginalL'auteur Obsivus | 2012-02-22
Vous devez vous connecter pour publier un commentaire.
Voir: notez ci-dessous
Serait-il utile de revenir Énumérable?
EDIT: Ouais, je sais que mon premier coup de feu a été mal!... n'a pas remarqué que votre point de vue veut un
Je suis d'accord avec les autres à propos de la conversion à la valeur de retour de la correspondance de type...
ou de régler l'attendait type de la vue...
peut-être que vous pouvez prendre avantage de la cartographie des cadres conceptuels comme automapper (http://automapper.org/) afin de vous aider à résoudre pour le mappage de code entre les objets du domaine et viewmodel.
c'est à vous, Pas besoin de plus bas à droit de vote...
1[NKI3.Models.Question]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[NKI3.Viewmodel.IndexCreateViewModel]'.J'ai eu à utiliser la cartographie, mais je N'ai pas utiliser automapper maintenant il fonctionne parfaitement
J'ai oublié
@model IEnumerable<...
dans le haut de la vue et j'ai obtenu une erreur similaire, et d'avoir à re-vérifier ce que j'avais manqué. Bon après, les gars.OriginalL'auteur silverfighter
Oui - l'action doit retourner un modèle du même type, a déclaré sur la première ligne de votre fichier de vue.
Changer votre première ligne dans le fichier d'affichage de:
et de changer votre code d'action (
Index()
) à un code qui permettra de renvoyer un objet de typeIndexCreateViewModel
.Ne fonctionne pas, erreur: Vous ne pouvez pas utiliser une instruction foreach pour les variables de type NKI3.Viewmodel.IndexCreateViewModel parce que NKI3.Viewmodel.IndexCreateViewModel contient pas une définition publique pour GetEnumerator
Vous devriez changer de
IndexCreateViewModel
être un IEnumerable de quelque chose d'autre (par exemple, créer une nouvelle classe nomméeQuestion
qui va être un élément dans l'interface IEnumerable)OriginalL'auteur Ofer Zelig
Le type retourné par
db.Question.Include(a => a.SubjectType).Include(a => a.CoreValue);
semble être
IQueryable<NKI3.Models.Question>
Vous avez besoin de convertir cette structure (votre modèle de données) à un
IEnumerable<IndexCreateViewModel>
Si il n'y a pas déjà une aide dans votre application pour transformer entre eux, puis vous aurez besoin d'écrire.
Je pense que vous avez besoin de prendre du recul et de voir comment votre modèle de données se rapporte à votre modèle de vue.
OriginalL'auteur koregan