1

示例#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();

看来我一定缺少一些简单的东西。如果我需要澄清其他任何事情,请告诉我。谢谢。

4

2 回答 2

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);
于 2013-02-14T16:31:25.617 回答
2

很简单,是的。明显没有。DropDownListFor不绑定到嵌套对象,如m => m.State.Id.

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

于 2013-02-14T16:12:02.033 回答