public class State
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Address
{
public State State { get; set; }
}
public class JobSeeker
{
public Address CurrentAddress { get; set; }
}
public class RegisterVM
{
public JobSeeker JobSeeker { get; set; }
public List<State> AllStates { get; set; }
}
在Razor中
@Html.DropDownListFor(m => m.JobSeeker.CurrentAddress.State,
new SelectList(Model.AllStates, "Id", "Name" ), " -----Select List----- ")
结果是下拉列表中填充了AllStates中存在的值,但问题是m.JobSeeker.CurrentAddress.State在发布到控制器操作时为空。如何将选定的下拉列表设置为属性m.JobSeeker.CurrentAddress.State
答案 0 :(得分:1)
如果您将ViewModel更改为...
public class RegisterVM
{
public JobSeeker JobSeeker { get; set; }
public List<State> AllStates { get; set; }
public string SelectedState { get; set; }
}
..让下拉使用SelectedState
属性而不是......
@Html.DropDownListFor(m => m.SelectedState,
new SelectList(Model.AllStates, "Id", "Name" ), " -----Select List----- ")
然后,您应该可以按名称将其分配给State
。
答案 1 :(得分:0)
模型绑定器应该如何将状态的Id映射到State类型的模型?如果您将剃刀视图代码更改为:
@Html.DropDownListFor(m => m.JobSeeker.CurrentAddress.State.Id, new SelectList(Model.AllStates, "Id", "Name" ), "--Select--")
然后您将获得一个非null的状态实例,但只会填充Id属性...
答案 2 :(得分:0)
谢谢你们所有人。在查看Request.Form对象后,我能够找出问题,该对象只有一个对State State的值,即dropdownlist的SelectedValue。 据我所知,不可能从UI设置状态属性,因此我必须使用从ModelBinder或Controller中的视图接收的选定状态ID来从db设置状态对象。