Проблема с заполнением выпадающих списков в приложении ASP.NET MVC 3 - PullRequest
2 голосов
/ 02 февраля 2011

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

Я следовал руководству и дважды проверил свой код. Я думаю, что проблема может быть с помощью папки editorstemplate. Понятия не имею, так как я новичок в MVC. Так в чем же проблема или как я могу ее отладить?

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

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

Хорошо, вот код кода для album.cshtml, который находится в папке / views / 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);
}

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

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

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

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

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

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

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

Ответы [ 2 ]

13 голосов
/ 02 февраля 2011

Я бы порекомендовал вам работать с моделями вида и избегать использования 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 голосов
/ 03 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...