通过 dropDownListFor() 将模型从视图传递到控制器
Passing Model via dropDownListFor() from view to controller
我正在尝试使用 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"); }
}
}
我将数据放入 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" />
}
所以这应该将模型发送到我的控制器。
但是当我检查控制器中传递的模型的内容时,一切都是 NULL
这不应该是因为当我调试视图并检查 ModelItems 的内容时,ModelItems 中的所有内容都在那里。
这是我检查传递的模型内容的时候
public ActionResult Home(Model model) <<<<<<<<<< Content == NULL
{
return View();
}
尝试将类型 ModelVM 传递给 Home 操作,因为这是传递给索引视图的类型。
而不是下拉声明中的model.SelectModel,你只需要一个int ID来捕获选择了哪个ID。
post 上的一个 <select>
元素返回单个值。 Html 不知道你的 c# Model
class 是什么,所以你不能绑定到一个复杂的对象。您需要绑定到 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 正确绑定
我正在尝试使用 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"); }
}
}
我将数据放入 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" />
}
所以这应该将模型发送到我的控制器。
但是当我检查控制器中传递的模型的内容时,一切都是 NULL
这不应该是因为当我调试视图并检查 ModelItems 的内容时,ModelItems 中的所有内容都在那里。
这是我检查传递的模型内容的时候
public ActionResult Home(Model model) <<<<<<<<<< Content == NULL
{
return View();
}
尝试将类型 ModelVM 传递给 Home 操作,因为这是传递给索引视图的类型。
而不是下拉声明中的model.SelectModel,你只需要一个int ID来捕获选择了哪个ID。
post 上的一个 <select>
元素返回单个值。 Html 不知道你的 c# Model
class 是什么,所以你不能绑定到一个复杂的对象。您需要绑定到 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 正确绑定