Die Verwendung von zwei IENumerable-Modelle auf einen Blick
Ich bin versucht, zwei Modelle im Blick, aber von dem was ich verstehe mein Programm einfach nicht sehen, alle Objekte innerhalb Modelle.
Hier ist mein code.
Modelle:
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-controller-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);
}
Anzeigen-code:
@model MvcMusicStore.Models.ModelMix
<h2>Index</h2>
@Html.DisplayNameFor(model => model.PostsObject.PostContent)
Wenn ich versuche, die auszuführen mein Programm erhalte ich diese Fehlermeldung:
CS1061: Die"
System.Sammlungen.Generisches.IEnumerable 'enthält keine definition
der" PostContent "nicht gefunden Methode der Erweiterung" PostContent ", die
nimmt ein erstes argument vom Typ' System.Sammlungen.Generisches.IEnumerable
"
Wie kann ich es machen so funktionieren wie Sie sollen? Es gibt eine Menge von Fragen wie meine auf dem internet, aber ich konnte keine passende mein Fall.
- Sie müssen Durchlaufen Sie in für die\foreach -
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durchlaufen Modelle kann ein wenig verwirrend zunächst, MVC, nur weil die Vorlagen Helfer (d.h.
Html.DisplayFor
undHtml.EditorFor
) können zur Verfügung gestellt werden Vorlagen, die die Helfer rufen automatisch für jedes element in einer Auflistung. Das bedeutet, dass wenn Sie das neue MVC, und Sie erkennen nicht, einDisplayTemplate
oder eineEditorTemplate
wurde nicht für die Sammlung schon, es sieht aus, als ob eine einfache:ist alles, was Sie brauchen. Also, wenn Sie gesehen haben so etwas bereits, das könnte sein, warum Sie aus der Annahme, es würde funktionieren. Aber, nehmen wir mal für einen moment, dass ein template nicht zur Verfügung gestellt wurden. Sie haben zwei Optionen.
Erstens-und das ist einfach, wäre die Verwendung
foreach
über die Sammlung:Können Sie auch ein
for
Schleife, aber mitIEnumerable<T>
es ist kein indexer, so wird dies nicht funktionieren:Wenn Sie nicht wollen, verwenden Sie die
for
Schleife immer noch, Sie können es verwenden, etwa so:Also je nachdem, was Sie bevorzugen. Aber irgendwann ist es eine gute Idee wäre, zu sehen in der Bereitstellung von Vorlagen für Ihre Typen. (Hinweis: Obwohl dieser Artikel wurde geschrieben für MVC 2, der Rat, immer noch gilt.) Sie ermöglichen es Ihnen, zu entfernen looping-Logik aus Ihrem Blick auf, halten Sie den Reiniger. In Kombination mit
Html.DisplayFor
oderHtml.EditorFor
, Sie generieren auch richtige element Namensgebung für Modell-Bindung (das ist toll). Auch Sie ermöglichen die Wiederverwendung von Präsentation für ein Typ ist.Eine Letzte Bemerkung, die ich machen würde ist, dass die Benennung Ihrer Eigenschaften ist etwas Ausführlicher:
Wir bereits wissen: Sie sind Objekte, so gibt es keine Notwendigkeit zu fügen, dass am Ende. Das ist besser lesbar:
Müssen Sie Durchlaufen Sie wie folgt:
Und auch es ist besser, zu speichern IList statt IEnumerable, wie es Count-Eigenschaft, anstelle der Verwendung von Count () - Methode
In der Regel müssen Sie Durchlaufen Sie jedes Element, wenn Sie vorbei sind in jeder Art von
IEnumerable<>
. Seit Sie gebaut eine semi-komplexe Modell, werden Sie wollen, um anzuzeigenforeach
Element in jeder Liste. Hier ist ein Beispiel aus der ASP.NET MVC-tutorials, die ich denke, würde dir ein bisschen weiterhelfen:In der Regel die meisten Leute benutzen ein
ICollection
für Ihre Listen, wo so könnten Sie zum Beispiel in einem Objekt:Quelle:
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
Ich würde empfehlen, beginnend am Anfang, wie es wird Ihnen helfen zu verstehen, warum Sie benötigen, um dies zu tun:
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc