【问题标题】:MVC DropDown for model inside ViewModelViewModel 中模型的 MVC DropDown
【发布时间】:2016-03-09 09:52:56
【问题描述】:

我正在开发一个 MVC 应用程序,对于我当前的表单,我有一个类似的 ViewModel

public class MyViewModel
    {

        public MyModel MyModel { get; set; }
        ...

MyModel 有一个类型

public class MyModel 
    {

        public int MyModelTypeId { get; set; }
        ...

现在,我需要一个 DropDownList 来填充 MyModelTypeId,

这就是我在视图中所拥有的:

@Html.DropDownList("MyModelTypeId", String.Empty)

在控制器中:

ViewBag.MyModelTypeId = new SelectList(db.MyModelTypes, "MyModelTypeId", "MyModelTypeName", model.MyModel.MyModelTypeId);

现在,下拉列表填充得很好,但是在发布时,选择的值没有绑定到“MyModel”

我做错了什么

【问题讨论】:

  • 这肯定会有所帮助:stackoverflow.com/a/5688922/1638261
  • 因为您生成了<select name="MyModelTypeId" ... >,但您的模型不包含名为MyModelTypeId 的属性(但它确实包含名为MyModel.MyModelTypeId 的属性)。始终使用强类型 HtmlHelpers - DropDownListFor()

标签: .net model-view-controller razor


【解决方案1】:

下拉列表绑定到您在 ViewBag 中创建的MyModelTypeId 属性,而不是“MyModel”类的MyModelTypeId 属性。

您应该将选择列表存储在 MyModel 中

public class MyModel 
{
    public int MyModelTypeId { get; set; }
    public IEnumerable<SelectListItem> MyModelTypes { get; set; }

将您在控制器中创建的选择列表分配给此属性,然后在您的视图中呈现下拉列表,将MyModelTypeId 作为绑定所选项目的值传递,并将MyModelTypes 作为选择列表传递给使用:

@Html.DropDownListFor(m => m.MyModel.MyModelTypeId, Model.MyModel.MyModelTypes)

表单提交时,选中的值会绑定到MyModel.MyModelTypeId

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多