C# 在视图中创建新的SelectList时,DropDownList for值未设置

C# 在视图中创建新的SelectList时,DropDownList for值未设置,c#,asp.net-mvc,asp.net-mvc-3,razor,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 3,Razor,Asp.net Mvc 4,示例#1(这一个有效) 我正在控制器中为第一个示例创建SelectList,如下所示 var states = Repository.GetStates(); var statesSelectList = new SelectList(states, "Id", "Name"); //model.States is a SelectList model.States = statesSelectList; //model.States is a List<State>. mode

示例#1(这一个有效)

我正在控制器中为第一个示例创建SelectList,如下所示

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

//model.States is a SelectList
model.States = statesSelectList;
//model.States is a List<State>.
model.States = Repository.GetStates();
示例#2(这不会设置加载时的选定值)

我在视图中为第二个示例创建SelectList,控制器如下所示

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

//model.States is a SelectList
model.States = statesSelectList;
//model.States is a List<State>.
model.States = Repository.GetStates();
//model.States是一个列表。
model.States=Repository.GetStates();

看来我错过了一些简单的东西。如果我还需要澄清什么,请告诉我。谢谢。

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


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

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


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

向视图模型添加属性:

private int? stateId;
public int StateId
{
    get { return stateId ?? State.Id; }
    set { stateId = value; }
}
在你看来:

@Html.DropDownListFor(m => m.StateId, new SelectList(Model.States, "Id", "Name"))
最后,在控制器的后期操作中:

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

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

private int? stateId;
public int StateId
{
    get { return stateId ?? State.Id; }
    set { stateId = value; }
}
在你看来:

@Html.DropDownListFor(m => m.StateId, new SelectList(Model.States, "Id", "Name"))
最后,在控制器的后期操作中:

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

我喜欢您的实现,但我喜欢Dave A关于绑定到嵌套对象的简单解释。谢谢我喜欢您的实现,但我喜欢Dave A关于绑定到嵌套对象的简单解释。谢谢