Problème de remplissage des listes déroulantes dans une application ASP.NET MVC 3

J’ai terminé le nouveau tutoriel (musicstore) sur MVC 3 sur www.asp.net . Tout s’est bien passé, à l’exception de la partie dans laquelle deux zones de liste déroulante doivent être renseignées à partir de la firebase database – ce qui n’est pas le cas.

J’ai suivi le tutoriel et vérifié deux fois mon code. Je pense que le problème peut utiliser le dossier editorstemplate. Aucune idée vraiment depuis Im nouveau à MVC. Alors quel est le problème ou comment puis-je le déboguer?

==============

Modifier 1

ok donc voici une partie du code pour album.cshtml qui se trouve dans le dossier / views / shared / editortemplates /

@model MvcMusicStore.Models.Album 

@Html.LabelFor(model => model.Genre) @Html.DropDownList("GenreId", new SelectList(ViewBag.Genres as System.Collections.IEnumerable, "GenreId", "Name", Model.GenreId))

@Html.LabelFor(model => model.Artist) @Html.DropDownList("ArtistId", new SelectList(ViewBag.Artists as System.Collections.IEnumerable, "ArtistId", "Name", Model.ArtistId))

dont je crois qu’elle est peuplée:

 public ActionResult Edit(int id) { ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList(); ViewBag.Artists = storeDB.Artists.OrderBy(a => a.Name).ToList(); var album = storeDB.Albums.Single(a => a.AlbumId == id); return View(album); } 

Je ne reçois aucune erreur en dehors du fait que les listes déroulantes ne sont pas remplies …

==============

Modifier 2

J’ai donc edit.cshtml dans /views/storemanager/edit.cshtml puis album.cshtml dans /views/shared/editortemplates/album.cshtml. Les listes déroulantes sont supposées être complétées depuis album.cshtml dans edit.cshtml. Je mets le code de album.cshtml directement dans edit.cshtml et cela fonctionne bien. Donc, je pense que le problème est que le fichier editortemplates / album.cshtml ne fonctionne pas, c’est-à-dire le remplissage de la page edit.cshtml. Alors qu’est-ce qui donne? Merci…

==============

Modifier 3

Ok j’ai trouvé le problème, j’ai eu la source de travail de CodePlex. Il semble que je n’ai pas configuré correctement les pages create.cshtml et edit.cshtml. Quoi qu’il en soit, tout est maintenant résolu, alors merci …

Je vous recommanderais de travailler avec des modèles d’affichage et d’éviter d’utiliser un ViewBag . Donc, vous commencez par définir un modèle de vue:

 public class AlbumViewModel { public ssortingng GenreId { get; set; } public IEnumerable Genres { get; set; } public ssortingng ArtistId { get; set; } public IEnumerable Artists { get; set; } public Album Album { get; set; } } 

et ensuite, dans votre action de contrôleur, vous devez renseigner ce modèle de vue:

 public ActionResult Edit(int id) { var model = new AlbumViewModel { Genres = storeDB.Genres.OrderBy(g => g.Name), Artists = storeDB.Artists.OrderBy(a => a.Name), Album = storeDB.Albums.Single(a => a.AlbumId == id) }; return View(model); } 

et enfin dans votre modèle d’éditeur ( ~/Views/Shared/EditorTemplates/AlbumViewModel.cshtml ):

 @model MvcMusicStore.Models.AlbumViewModel 

@Html.LabelFor(model => model.GenreId) @Html.DropDownListFor(x => x.GenreId, new SelectList(Model.Genres, "GenreId", "Name"))

@Html.LabelFor(model => model.ArtistId) @Html.DropDownListFor(x => x.ArtistId, new SelectList(Model.Artists, "ArtistId", "Name"))

Ok j’ai trouvé le problème, j’ai eu la source de travail de CodePlex. Il semble que je n’ai pas configuré correctement les pages create.cshtml et edit.cshtml. Quoi qu’il en soit, tout est maintenant résolu, alors merci …