我正在尝试使用dropDownListFor将模型从我的视图传递给我的控制器。
从列表中选择某些内容后,它会将模型发送到我的控制器,但它的内容为NULL
。
这就是我对Model
的看法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"); }
}
}
将数据放入ViewModel时的控制器如下所示
public ActionResult Index()
{
ModelVM modelVM= new ModelVM()
{
Models = manager.GetAllModels().ToList()
};
return View(modelVM);
}
最后这是我在DropDownList的视图中所拥有的
@using (Html.BeginForm("Home", "Home", FormMethod.Post))
{
@Html.DropDownListFor(model => model.SelectModel, Model.ModelItems)
<input type="submit" value="Go" />
}
所以这应该将Model发送给我的控制器。
但是当我检查控制器中传递的模型的内容时,一切都是NULL
,这不应该是因为当我调试视图并检查ModelItems的内容时,ModelItems中的所有内容都在那里
这是我检查传递的模型的内容
public ActionResult Home(Model model) <<<<<<<<<< Content == NULL
{
return View();
}
答案 0 :(得分:3)
帖子上的<select>
元素支持单个值。 Html没有关于你的c#Model
类的概念,所以你不能绑定到复杂的对象。您需要绑定到ModelId
的{{1}}属性。您的视图模型应为
Model
并在控制器中
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);
}
并且在post方法中,您的模型将与所选模型的ID正确绑定
答案 1 :(得分:0)
尝试将ModelVM类型传递给Home操作,因为这是传递给Index视图的类型。
而不是下拉声明中的model.SelectModel,您只需要一个int ID来捕获选择的ID。