Asp.net mvc 4 通过dropDownListFor()将模型从视图传递到控制器

Asp.net mvc 4 通过dropDownListFor()将模型从视图传递到控制器,asp.net-mvc-4,razor,html.dropdownlistfor,Asp.net Mvc 4,Razor,Html.dropdownlistfor,我正在尝试使用dropDownListFor将模型从视图传递到控制器。 从列表中选择后,它会将模型发送到我的控制器,但其内容NULL 这是我为模型准备的 public class Model { public int ModelId { get; set; } [Required] public string Name { get; set; } } 这就是我的ViewModel的外观 public class ModelVM { public List<

我正在尝试使用dropDownListFor将模型从视图传递到控制器。 从列表中选择后,它会将模型发送到我的控制器,但其内容
NULL

这是我为模型准备的

public class Model
{
    public int ModelId { get; set; }
    [Required]
    public string Name { get; set; }
}
这就是我的ViewModel的外观

public class ModelVM
{
    public List<Model> Models;
    public Model SelectModel { get; set; }
    public IEnumerable<SelectListItem> ModelItems
    {
        get { return new SelectList(Models, "ModelId", "Name"); }
    }
}
最后,这是我在dropDownList视图中看到的内容

    @using (Html.BeginForm("Home", "Home", FormMethod.Post))
    {
        @Html.DropDownListFor(model => model.SelectModel, Model.ModelItems)
        <input type="submit" value="Go" />
    }

正在尝试将ModelVM类型传递给Home操作,因为这是传递给Index视图的类型

与下拉声明中的model.SelectModel不同,您只需要一个int ID来捕获所选的ID。

一个
元素返回一个值。Html对c#
模型
类没有概念,因此无法绑定到复杂对象。您需要绑定到
Model
ModelId
属性。您的视图模型应该是

public class ModelVM
{
  [Display(Name = "Model")]
  public int SelectedModel { get; set; }
  public SelectList ModelItems { get; set ;}
}
在控制器中

public ActionResult Index()
{
    ModelVM modelVM = new ModelVM()
    {
        ModelItems = new SelectList(manager.GetAllModels(), "ModelId", "Name")
        // SelectedModel = ? if you want to preselect an item
    };
    return View(modelVM);
}
在我看来

@Html.LabelFor(m => m.SelectedModel)
@Html.DropDownListFor(m => m.SelectedModel, Model.ModelItems)

在post方法中,您的模型将与所选模型的ID正确绑定

如果我们在ModelVM中有更多属性会发生什么。它会起作用吗?或者我们不能在那里有更多的属性。@HeemanshuBhalla,您可以在视图模型中有任意多的属性
public ActionResult Index()
{
    ModelVM modelVM = new ModelVM()
    {
        ModelItems = new SelectList(manager.GetAllModels(), "ModelId", "Name")
        // SelectedModel = ? if you want to preselect an item
    };
    return View(modelVM);
}
@Html.LabelFor(m => m.SelectedModel)
@Html.DropDownListFor(m => m.SelectedModel, Model.ModelItems)