【问题标题】:DropDownListFor does not work with ViewData or ViewBagDropDownListFor 不适用于 ViewData 或 ViewBag
【发布时间】:2017-01-30 20:43:48
【问题描述】:

当我尝试使用 DropDownListFor 并指向一个选择列表时,我遇到了这个错误“没有 IEnumerable 类型的 ViewData 项具有键 'StatusOptions'”

我知道已经有很多关于此的问题,但没有一个能解决我的问题。

假设我正在实施一个下拉列表作为基于任务状态的过滤器。所以FilterView对应FilterModel,但是控制器是一个更通用的PageController,对应PageModel,所以我不能有模型中包含的状态列表而不是ViewBag或ViewData。

我也不想硬编码视图中的状态,因为它们有外部服务支持。

这就是我现在正在做的事情:

public class FilterModel
{
  public string SelectedStatus {get;set;}
}

在我的页面控制器中:

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'],但均无效。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      选择列表而不是选择列表项

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多