将Viewmodel属性绑定到razor

时间:2016-03-10 13:29:01

标签: asp.net-mvc razor asp.net-mvc-5

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

3 个答案:

答案 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设置状态对象。