【问题标题】:Binding Viewmodel Property to dropdown selected item in razor将 Viewmodel 属性绑定到 razor 中的下拉选定项目
【发布时间】:2016-03-10 13:29:01
【问题描述】:
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; }
}

在剃刀中

 @Html.DropDownListFor(m => m.JobSeeker.CurrentAddress.State, 
              new SelectList(Model.AllStates, "Id", "Name" ), "  -----Select List-----  ")

结果是下拉列表填充了 AllStates 中存在的值,但问题是 m.JobSeeker.CurrentAddress.State 在发布到控制器操作时为空。如何将下拉列表的选定值设置为属性 m.JobSeeker.CurrentAddress.State

【问题讨论】:

  • 控制器长什么样子?
  • State 是一个复杂对象,&lt;select&gt; 回发单个值,而不是复杂对象。它需要是@Html.DropDownListFor(m =&gt; m.JobSeeker.CurrentAddress.State.ID, ....) 但不要那样做!将public Guid SelectedStata { get; set; } 属性添加到RegisterVM 并绑定到该属性。

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


【解决方案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

【讨论】:

  • 基于 OP 的 State 类,它需要是 public Guid SelectedState { get; set; }
【解决方案2】:

模型绑定器应该如何将状态的 Id 映射到 State 类型的模型?如果您将剃刀视图代码更改为:

@Html.DropDownListFor(m => m.JobSeeker.CurrentAddress.State.Id, new SelectList(Model.AllStates, "Id", "Name" ), "--Select--")

然后你会得到一个非空的 state 实例,但只会填充 Id 属性...

【讨论】:

    【解决方案3】:

    谢谢大家。在查看 Request.Form 对象后,我能够找出问题所在,该对象对状态字段只有一个值,即下拉列表的 SelectedValue。 据我了解,无法从 UI 设置 state 属性,因此我必须使用从 ModelBinder 或 Controller 中的视图接收到的 State 的选定 ID 来从 db 设置 State Object。

    【讨论】:

      猜你喜欢
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      相关资源
      最近更新 更多