【发布时间】:2015-10-18 02:15:44
【问题描述】:
我遇到了一个问题。我目前正在尝试制作一个用户页面,其中一些下拉菜单是可变的,并由他们的“访问级别”确定。然后我想将视图中的数据保存到列表中,然后在“发布”控制器方法中处理它。我找到了这个关于可能解决方案的链接 (Assign selectlist to dynamically created dropdown in MVC),但我仍然遇到问题。
这是我用来设置需要生成下拉菜单的数据的控制器代码:
var permData = db.LabPermissions.Where(x => x.AccessLevel == 1).ToList();
//sets up generic dropdown data used for all dropdowns
ViewBag.DropDownData = new List<SelectListItem>
{
new SelectListItem{ Value = "0",Text = "No"},
new SelectListItem{ Value = "1",Text = "Yes"},
};
ViewModel obj = new ViewModel();
obj.DataFromController = permData;
//other viewmodel data
return("MyView",obj);
然后我将数据传递给我的视图,看起来像这样(这也是堆栈溢出链接设置视图的方式)
@for(int i = 0; i < Model.DataFromController.Count(); i++)
{
<div class="row">
<div class="col-md-2">
<b>@Html.DisplayFor(m => m.DataFromController[i].Lab.LabName)</b>
</div>
<div class="col-md-2">
@Html.DropDownListFor(m => m.DataFromController[i].Assigner, (SelectList)ViewBag.DropDownData, "Select One")
</div>
<div class="col-md-8">
</div>
</div>
}
设置完成并运行应用程序后,我收到以下错误:
Additional information: Cannot convert type 'System.Collections.Generic.List<System.Web.Mvc.SelectListItem>' to 'System.Web.Mvc.SelectList'
在我看来,错误是放在我的@Html.DropDownListFor 代码行上。
感谢您的帮助!
【问题讨论】:
-
ViewBag.DropDownData是IEnumerable<SelectListItem>的类型,而不是SelectList,因此尝试像使用(SelectList)ViewBag.DropDownData那样进行转换会引发异常 - 它需要是(IEnumerable<SelectListItem>)ViewBag.DropDownData。注意SelectList是IEnumerable<SelectListItem>,但IEnumerable<SelectListItem>不是SelectList
标签: c# html asp.net-mvc database