为什么我不能让它工作?
控制器:
List<SelectListItem> list = new List<SelectListItem>() {
new SelectListItem(){ Value="1", Text="Bohuslän"},
new SelectListItem(){ Value="2", Text="Dalarna"},
new SelectListItem(){ Value="3", Text="Dalsland"}
};
SelectList surbs = new SelectList(list, "Value", "Text");
ViewBag.Dropdown = surbs;
return view();
使用viewmodel
public class CreateViewModel
{
public int SelectedId { get; set; }
public Add Add { get; set; }
}
查看:
@Html.DropDownListFor(model => model.SelectedId, (SelectList)ViewBag.Dropdown)
发布到控制器
public ActionResult Create(CreateViewModel adds)
{
if (ModelState.IsValid)
{
Add add = new Add();
。
错误:
具有键'SelectedId'的ViewData项的类型为'System.Int32',但必须是'IEnumerable'类型。
答案 0 :(得分:2)
您的问题是,在回发后,ViewBag.Dropdown
的值不会保留,其值为Null
,因此会抛出此错误。在HTTP POST方法中再次设置ViewBag
中的数据,如下所示: -
public ActionResult Create(CreateViewModel adds)
{
if (ModelState.IsValid)
{
Add add = new Add();
------
List<SelectListItem> list = new List<SelectListItem>() {
new SelectListItem(){ Value="1", Text="Bohuslän"},
new SelectListItem(){ Value="2", Text="Dalarna"},
new SelectListItem(){ Value="3", Text="Dalsland"}
};
SelectList surbs = new SelectList(list, "Value", "Text");
ViewBag.Dropdown = surbs;
return View();
您可以将其包装在方法中以避免代码重复。
或者我认为最好的方法不是在ViewBag
中传递数据,而是在ViewModel中添加SelectList
属性,然后传递这样的内容: -
更新了ViewModel: -
public class CreateViewModel
{
public int SelectedId { get; set; }
public string Add { get; set; }
public SelectList SurbsList { get; set; }
}
对于Get和&amp;发布请求,将SurbsList
绑定到这样: -
adds.SurbsList = GetSurbs();
其中,GetSurbs()是一种方法: -
private SelectList GetSurbs()
{
List<SelectListItem> list = new List<SelectListItem>()
{
new SelectListItem(){ Value="1", Text="Bohuslän"},
new SelectListItem(){ Value="2", Text="Dalarna"},
new SelectListItem(){ Value="3", Text="Dalsland"}
};
return new SelectList(list, "Value", "Text");
}
最后像这样绑定你的下拉列表: -
@Html.DropDownListFor(model => model.SelectedId, Model.SurbsList)