为什么这会呈现为“System.Web.Mvc.SelectListItem”的列表?

时间:2010-06-09 18:43:09

标签: c# asp.net-mvc linq-to-sql

我正在尝试使用从属性中提取的值来填充DropDownList,而我现在的最终结果是除了“System.Web.Mvc.SelectListItem”之外的任何内容。我确信我在这里省略了一些小步骤,但对于我的生活,我无法弄清楚它是什么。

属性GET生成列表:

public IEnumerable<SelectListItem> AllFoo {
    get {
        var foo = from g in Bar
                  orderby g.name
                  select new SelectListItem {
                     Value = g.fooid.ToString(),
                     Text = g.name
                  };

        return foo.AsEnumerable();
    }
}

控制器代码:

public ActionResult Edit(string id) {
    // n/a code
    ViewData["fooList"] = new SelectList(g.AllFoo, g.fooid);

    return View(g);
}

观看代码:

<%= Html.DropDownListFor(model => model.fooid, ViewData["fooList"] as SelectList) %>

3 个答案:

答案 0 :(得分:33)

这里的问题是你不应该用SelectList填充IEnumerable<SelectListItem>。使用SelectListIEnumerable<SelectListItem>,但不能同时使用两者。有关详细信息,请查看此问题:Asp.Net MVC 2 Dropdown Displaying System.Web.MVC.SelectListItem

答案 1 :(得分:2)

我遇到了同样的问题。您应该在视图中呈现您的列表,如

@Html.DropDownListFor(model => model.fooid, new 
    SelectList(ViewData["fooList"],"Text","Value", Model.DefaultValue))

这是基于带有剃刀视图的c#

答案 2 :(得分:-5)

编辑:这个问题与已经提出的问题非常类似:

ASP.NET MVC 2 - Html.DropDownListFor confusion with ViewModel


否则,您可能会发现本文有用:

http://www.nickriggs.com/posts/rendering-and-binding-drop-down-lists-using-asp-net-mvc-2-editorfor/

它使用EditorFor,但DisplayFor也可以这样做。