Asp.net mvc 4 通过dropDownListFor()将模型从视图传递到控制器
我正在尝试使用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<
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)