我已经在www.asp.net上的MVC 3上完成了新教程(musicstore)。一切正常,除了应该从数据库中填充两个下拉框的部分(不是)。

我按照教程学习并仔细检查了我的代码。我认为问题可能出在使用editorstemplate文件夹。自从我是MVC的新手以来,我真的不知道。那么问题是什么或我该如何调试呢?

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

编辑1

好的,这是/ views / shared / editortemplates /文件夹中的album.cshtml的一些代码

   @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

所以我在/views/storemanager/edit.cshtml中有edit.cshtml,然后在/views/shared/editortemplates/album.cshtml中有album.cshtml。这些下拉列表应该从album.cshtml填充到edit.cshtml中。我将album.cshtml中的代码直接放入edit.cshtml中,效果很好。所以我认为问题在于editortemplates / album.cshtml无法正常工作,即填充edit.cshtml页面。那有什么呢?谢谢...

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

编辑3

好的,我找到了问题,我从CodePlex获得了有效的源代码。看来我没有正确设置create.cshtml和edit.cshtml页面。
无论如何现在都固定了,所以谢谢...

最佳答案

我建议您使用视图模型,并避免使用任何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>

关于c# - 在ASP.NET MVC 3应用程序中填充下拉框时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4869009/

10-13 01:54