我有两个这样的Model类:
程序:
public class Program
{
public int ProgramId { get; set; }
public string Name { get; set; }
public virtual Playlist chosenPlaylist { get; set; }
public virtual IList<Playlist> Playlists { get; set; }
}
public class Playlist
{
public int PlaylistId { get; set; }
public string Name { get; set; }
public int NumberVotes { get; set; }
public virtual IList<Song> Songs { get; set; }
}
在我的编辑程序视图中,我想更新chosenPlaylist
,以便我可以允许用户选择Program
的{{1}}中的任何一个。
例如:
计划1:
选择播放列表:播放列表1
因此,用户可以编辑并选择无(因此没有播放列表),1(不会更改任何内容)或2并将其保存到数据库中。
我试图在我的控制器中创建一个下拉列表,但它不会更新。
以下是我在GET和POST编辑Playlist
中的内容:
ActionResult
在我的观点中:
ViewBag.chosenId = new SelectList(program.Playlists, "PlaylistId",
"Name", program.chosenPlaylist.PlaylistId);
这会显示列表正确并预先选择所选的播放列表(如果有的话)(如果没有,我会为其编写代码以默认为第一个)。如果程序中没有播放列表,则很容易控制。
然而,问题:
没有抛出任何错误,除了最重要的部分外,一切似乎都有效 - 更新数据库。
答案 0 :(得分:3)
确保没有@Html.HiddenFor
或类似的呈现相同的项目。
答案 1 :(得分:2)
你可以做两件事:
将@Html.DropDownList("PlaylistId", (SelectList)ViewBag.chosenId)
更改为@Html.DropDownList("chosenPlaylist.PlaylistId", (SelectList)ViewBag.chosenId)
或使用Html.DropDownListFor(m => m.chosenPlaylist.PlaylistId, (SelectList)ViewBag.chosenId))
。
答案 2 :(得分:0)
使用时:
@Html.DropDownList("PlaylistId", (SelectList)ViewBag.chosenId)
您必须将PlaylistId选择列表重命名为与存储所选Id的属性名不同的内容,否则不会将其标记为已选中。
(现在有意义的是,我输入它,你不能将所选的值存储到与选择列表相同的内容中)
基本上说:
@Html.DropDownList("MySelectListId", (SelectList)ViewBag.chosenId)
会奏效。
您可以在codeplex查看有关此问题的评论,以获取更多信息:http://aspnet.codeplex.com/workitem/4932