DropDownListFor不适用于ViewData或ViewBag

时间:2017-01-30 20:43:48

标签: c# asp.net-mvc

我遇到了这个错误“当我尝试使用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'],但都不起作用。

2 个答案:

答案 0 :(得分:0)

您似乎尝试将SelectList(ViewBag.StatusOptions的类型)转换为IEnumerable<SelectListItem>。如果您将List<SelectListItem>分配给ViewBag.StatusOptions,那么它应该可以正常工作。

答案 1 :(得分:0)

SelectList而不是SelectListItem

Html.DropDownListFor(model => model.SelectedStatus, ViewBag.StatusOptions as SelectList)