DropDownListFor在视图中创建新的SelectList时未设置的值

时间:2013-02-14 15:44:35

标签: c# asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-4

示例#1(这个有效)

@Html.DropDownListFor(m => m.State.Id, Model.States)

我正在控制器中为第一个示例创建SelectList。

var states = Repository.GetStates();
var statesSelectList = new SelectList(states, "Id", "Name");

//model.States is a SelectList
model.States = statesSelectList;

示例#2(这不会在加载时设置所选值)

@Html.DropDownListFor(m => m.State.Id, new SelectList(Model.States, "Id", "Name"))

我在第二个例子的视图中创建了SelectList,控制器看起来像这样。

//model.States is a List<State>.
model.States = Repository.GetStates();

似乎必须有一些我想念的简单事物。如果我需要澄清其他任何内容,请告诉我。感谢。

2 个答案:

答案 0 :(得分:3)

向视图模型添加属性:

private int? stateId;
public int StateId
{
    get { return stateId ?? State.Id; }
    set { stateId = value; }
}

然后在你的Razor视图中:

@Html.DropDownListFor(m => m.StateId, new SelectList(Model.States, "Id", "Name"))

最后在你的控制器POST动作中:

model.State = Repository.GetState(model.StateId);

答案 1 :(得分:2)

简单,是的。显而易见没有。 DropDownListFor不会绑定到m => m.State.Id等嵌套对象。

它专为更基本的关系而设计,例如m => m.Id