1

我有两个这样的模型类:

程序:

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

在我的编辑程序视图中,我想更新 s,chosenPlaylist以便允许用户选择一个或一个Programs Playlist

例如:

方案一:

  • 播放列表 1
  • 播放列表 2

选择的播放列表:播放列表 1

因此,用户可以编辑并选择无(因此没有播放列表)、1(不会改变任何内容)或 2,然后将其保存到数据库中。

我试图在我的控制器中创建一个下拉列表,但它不会更新。

这是我的 GET 和 POST Edit 中ActionResult的内容:

ViewBag.chosenId = new SelectList(program.Playlists, "PlaylistId",
"Name", program.chosenPlaylist.PlaylistId);

在我看来:

@Html.DropDownList("PlaylistId", (SelectList)ViewBag.chosenId)

这会很好地显示列表并预先选择所选的播放列表,如果有的话(如果没有,我会为它编写代码使其默认为第一个)。如果程序中没有播放列表,那很容易控制。

然而,问题:

  • 不更新我的模型。例如,如果选择播放列表 2,而我选择 P1,则在 POST 事件之后继续显示 P2。
  • 我想在下拉列表中包含一个选项,以使其不选择任何值(因此,在该字段中放置一个 NULL )。那可能吗?

没有抛出任何错误,除了最重要的部分——更新数据库之外,一切似乎都正常。

4

3 回答 3

3

确保没有@Html.HiddenFor或类似的渲染相同的项目。

于 2015-01-27T01:47:44.870 回答
2

你可以做两件事:

换成@Html.DropDownList("PlaylistId", (SelectList)ViewBag.chosenId)_@Html.DropDownList("chosenPlaylist.PlaylistId", (SelectList)ViewBag.chosenId)

或使用Html.DropDownListFor(m => m.chosenPlaylist.PlaylistId, (SelectList)ViewBag.chosenId)).

于 2012-12-05T12:42:44.033 回答
0

使用时:

@Html.DropDownList("PlaylistId", (SelectList)ViewBag.chosenId)

您必须将 PlaylistId 选择列表重命名为与存储所选 Id 的属性名称不同的名称,否则它不会被标记为选中。

(现在我输入它是有道理的,你不能将选定的值存储到与选择列表相同的东西中)

基本上说:

@Html.DropDownList("MySelectListId", (SelectList)ViewBag.chosenId)

将工作。

您可以在 codeplex 上查看有关此问题的评论以获取更多信息:http ://aspnet.codeplex.com/workitem/4932

于 2012-12-05T13:02:13.043 回答