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

本文关键字:设置 SelectList 视图 创建 DropDownListFor | 更新日期: 2023-09-27 17:59:25

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

我似乎错过了一些简单的东西。如果我需要澄清其他事情,请告诉我。谢谢

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

将属性添加到视图模型中:

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

简单,是的。显然没有。DropDownListFor不绑定到像m => m.State.Id这样的嵌套对象。

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