Comment utiliser deux IENumerable modèles dans une vue
Je suis en train d'utiliser deux modèles dans un point de vue, mais ce que je comprends de mon programme, il suffit de ne pas voir tous les objets à l'intérieur des modèles.
Voici mon code.
Modèles:
public class Album
{
[Key]
public int ThreadId { get; set; }
public int GenreId { get; set; }
public string Title { get; set; }
public string ThreadByUser { get; set; }
public string ThreadCreationDate { get; set; }
public string ThreadContent { get; set; }
public Genre Genre { get; set; }
public List<Posts> Posty { get; set; }
}
public class Posts
{
[Key]
public int PostId { get; set; }
public int ThreadId { get; set; }
public string PostTitle { get; set; }
public string PostContent { get; set; }
public string PostDate { get; set; }
public string PosterName { get; set; }
public Album Album { get; set; }
}
public class ModelMix
{
public IEnumerable<Posts> PostsObject { get; set; }
public IEnumerable<Album> ThreadsObject { get; set; }
}
Index du contrôleur de code:
public ActionResult Index(int id)
{
ViewBag.ThreadId = id;
var posts = db.Posts.Include(p => p.Album).ToList();
var albums = db.Albums.Include(a => a.Genre).ToList();
var mixmodel = new ModelMix
{
PostsObject = posts,
ThreadsObject = albums
};
return View(mixmodel);
}
Afficher le code:
@model MvcMusicStore.Models.ModelMix
<h2>Index</h2>
@Html.DisplayNameFor(model => model.PostsObject.PostContent)
Et quand j'essaie d'exécuter mon programme, j'obtiens cette erreur:
CS1061:"
Système.Les Collections.Génériques.IEnumerable 'ne contient pas une définition
de" PostContent "pas trouvé de méthode pour développer" PostContent ", qui
prend un premier argument de type' System.Les Collections.Génériques.IEnumerable
"
Comment je peux le faire fonctionner comme prévu? Il y a beaucoup de questions comme la mienne sur internet, mais je ne pouvais pas trouver n'importe quel correspondant à mon cas.
OriginalL'auteur user3163730 | 2014-01-06
Vous devez vous connecter pour publier un commentaire.
En boucle sur les modèles peut être un peu déroutant pour commencer, MVC, seulement parce que le basé sur un modèle aides (c'est à dire
Html.DisplayFor
etHtml.EditorFor
) peut être fourni des modèles qui l'aide d'invoquer automatiquement pour chaque élément d'une collection. Cela signifie que si vous êtes nouveau à la MVC, et vous n'avez pas réaliser unDisplayTemplate
ou unEditorTemplate
n'a été prévu pour la collection déjà, il semble qu'un simple:est tout ce dont vous avez besoin. Donc, si vous avez vu quelque chose comme ça déjà, ce qui explique peut-être pourquoi vous avez fait l'hypothèse que cela fonctionnerait. Cependant, supposons pour un instant que le modèle n'a pas été fourni. Vous avez deux options.
Tout d'abord, et plus simplement, serait d'utiliser des
foreach
plus de la collection:Vous pouvez également utiliser un
for
boucle, mais avecIEnumerable<T>
, il n'y a pas d'indexation, de sorte que cela ne fonctionne pas:Si vous ne souhaitez utiliser le
for
boucle encore, vous pouvez l'utiliser comme ceci:Donc utiliser celui que vous préférez. Cependant, à un certain point, il serait une bonne idée de chercher en fournissant des modèles de types. (Remarque: Bien que cet article a été écrit pour MVC 2, l'avis s'applique toujours.) Ils vous permettent de retirer de boucle logique à partir de votre point de vue, en gardant les plus propres. Lorsqu'il est combiné avec
Html.DisplayFor
, ouHtml.EditorFor
, ils favoriseront également l'élément correct de nommage pour la liaison du modèle (qui est excellent). Ils vous permettent également de réutiliser présentation pour un type de.Un dernier commentaire que je ferais, c'est que le nommage de vos biens est un peu verbeux:
Nous savons déjà qu'ils sont des objets, donc il n'y a pas besoin d'ajouter que, sur la fin. C'est plus lisible:
Vous êtes les bienvenus. 🙂
OriginalL'auteur John H
Vous avez besoin pour effectuer une itération comme ceci:
Et aussi il est préférable d'enregistrer les IList au lieu de IEnumerable, car il aura le Comte de la propriété, au lieu d'utiliser la méthode Count ()
yep, je sais. mais la question de départ était d'environ DisplayNameFor méthode , qui est ainsi faite de l'échantillon avec elle
Ça sonne bien pour moi!
OriginalL'auteur Sergey Litvinov
Généralement vous aurez besoin pour itérer sur chaque article, si vous êtes de passage dans n'importe quel type de
IEnumerable<>
. Depuis que vous avez construit une semi-modèle complexe, vous voulez afficherforeach
élément de chaque liste. Voici un exemple sur la base de la ASP.NET MVC tutoriels que je pense pourrait vous aider un peu:Généralement la plupart des gens utilisent un
ICollection
pour leurs listes, où un exemple pourrait être un objet:Source:
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application
Je voudrais vous recommandons de commencer par le début, car il va vous aider à comprendre pourquoi vous avez besoin pour ce faire:
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc
Vous pouvez simplement décider quel Modèle vous voulez à partir de l'objet complexe. I. E. Modèle.L'objet1.Quel Que Soit / Modèle.L'objet2.Quelle que soit
OriginalL'auteur Jon Douglas