2011-02-01 3 views
2

Я закончил новый учебник (музыкальный магазин) на MVC 3 по адресу www.asp.net. Все прошло отлично, за исключением той части, где из базы данных должны быть заполнены два выпадающих окна, а это не так.Проблема заполнения выпадающих списков в ASP.NET MVC 3 Приложение

Я следил за учебником и дважды проверял свой код. Я думаю, что проблема может заключаться в использовании папки editorstemplate. Не знаю, с тех пор как Im new для MVC. Итак, в чем проблема или как ее отладить?

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

Edit 1

нормально, так вот часть кода для album.cshtml, который находится в/просмотров/Shared/editortemplates/папка

@model MvcMusicStore.Models.Album 
<p> @Html.LabelFor(model => model.Genre) @Html.DropDownList("GenreId", 
new SelectList(ViewBag.Genres as System.Collections.IEnumerable, 
"GenreId", "Name", Model.GenreId)) 
</p> 
<p> @Html.LabelFor(model => model.Artist) @Html.DropDownList("ArtistId", 
new SelectList(ViewBag.Artists as System.Collections.IEnumerable, 
"ArtistId", "Name", Model.ArtistId)) 
</p> 

который я считаю заселена из:

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); 
} 

Я не получаю никаких ошибок кроме того, д ropdowns не заселены ...

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

Edit 2

поэтому у меня есть edit.cshtml в/просмотров/storemanager/редактировать. cshtml, а затем у меня есть album.cshtml в /views/shared/editortemplates/album.cshtml. Выпадающие списки должны быть заполнены из album.cshtml в edit.cshtml. Я поместил код из album.cshtml прямо в edit.cshtml, и он отлично работает. Поэтому я думаю, что проблема в том, что editortemplates/album.cshtml не работает, то есть заполняет страницу edit.cshtml. Так что же дает? Спасибо ...

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

Редактировать 3

Ok Я нашел эту проблему, я получил рабочий источник из CodePlex. Кажется, что у меня не были правильно созданы страницы create.cshtml и edit.cshtml. В любом случае все исправлено сейчас так спасибо ...

+3

Можете ли вы разместить код? – ajma

+0

Или ошибка, которую вы получите? –

+0

Press F5 = Debug – Marc

ответ

13

Я бы порекомендовал вас работать с моделью просмотра и не использовать ViewBag. Таким образом, вы начинаете с определения вида модели:

public class AlbumViewModel 
{ 
    public string GenreId { get; set; } 
    public IEnumerable<Genre> Genres { get; set; } 

    public string ArtistId { get; set; } 
    public IEnumerable<Artist> Artists { get; set; } 

    public Album Album { get; set; } 
} 

, а затем внутри контроллера действий вы бы заполнить этот вид модели:

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); 
} 

и, наконец, в шаблоне редактора (~/Views/Shared/EditorTemplates/AlbumViewModel.cshtml):

@model MvcMusicStore.Models.AlbumViewModel 
<p> 
    @Html.LabelFor(model => model.GenreId) 
    @Html.DropDownListFor(x => x.GenreId, new SelectList(Model.Genres, "GenreId", "Name")) 
</p> 

<p> 
    @Html.LabelFor(model => model.ArtistId) 
    @Html.DropDownListFor(x => x.ArtistId, new SelectList(Model.Artists, "ArtistId", "Name")) 
</p> 
+0

удалить этот комментарий –

+0

Зачем это делать? не является viewbag только оболочкой для viewdata, за исключением динамического типа? @Darin Dimitrov –

+1

Я думаю, что подход ViewModel предпочтительнее использования ViewData/ViewBag, поскольку ViewModels строго типизированы. Некоторые ссылки на эту тему: http://nerddinnerbook.s3.amazonaws.com/Part6.htm и http: // stackoverflow.ком/вопросы/1004948/в использовании-ViewData или-не в использовании-ViewData –

0

Хорошо, я нашел проблему, я получил рабочий источник из CodePlex. Кажется, что у меня не были правильно созданы страницы create.cshtml и edit.cshtml. В любом случае все исправлено сейчас так спасибо ...

Смежные вопросы