我遇到了这个错误“当我尝试使用DropDownListFor并指向选择列表时,没有IEnumerable类型的ViewData项具有键'StatusOptions'”
我知道有很多关于这方面的问题,但没有一个问题能解决我的问题。
假设我正在实施一个下拉列表作为基于其状态的任务的过滤器。所以FilterView对应于FilterModel,但是控制器是一个更通用的PageController,它对应于PageModel,所以我不能拥有模型中包含的状态列表而不是ViewBag或ViewData。
我也不想在视图中对状态进行硬编码,因为它们受到外部服务的支持。
这就是我现在正在做的事情:
public class FilterModel
{
public string SelectedStatus {get;set;}
}
在我的PageController中:
public Result ListTasks()
{
...
ViewBag.StatusOptions = new SelectList (
new[] { "New", "Pending", "Completed"}.Select(x => new SelectListItem { Value = x, Text = x }),
"Value",
"Text"
);
...
}
在我的观点中:
Html.DropDownListFor(model => model.SelectedStatus, (IEnumerable<SelectListItem>)ViewBag.StatusOptions)
我也尝试将其投射到SelectList或使用ViewData ['StatusOptions'],但都不起作用。
答案 0 :(得分:0)
您似乎尝试将SelectList
(ViewBag.StatusOptions的类型)转换为IEnumerable<SelectListItem>
。如果您将List<SelectListItem>
分配给ViewBag.StatusOptions,那么它应该可以正常工作。
答案 1 :(得分:0)
SelectList而不是SelectListItem
Html.DropDownListFor(model => model.SelectedStatus, ViewBag.StatusOptions as SelectList)