为什么我的Html.DropDownList会产生一个填充了“System.Web.Mvc.SelectListItem”字符串的列表?

时间:2013-07-25 12:49:36

标签: c# asp.net .net asp.net-mvc-3

我有以下型号:

public class MyModel {
    public int SelectedItemId { get; set; }
    public SelectList PossibleItemsList { get; set; }
};

在我的控制器中,我执行以下操作:

 var possibleItems = someSource.Select( item => new SelectListItem
                                          {
                                             Text = item.FirstMember,
                                             Value = item.SecondMember
                                          }).AsEnumerable();
 var model = new MyModel();
 model.SelectedItemId = somevalue;
 model.PossibleItemsList = new SelectList(possibleItems, model.SelectedItemId);
 return View( model );

在我看来,我有这段代码:

@Html.DropDownList("SelectedItemId ", Model.PossibleItemsList )

当代码运行时,控制器代码似乎工作正常,但视图有一个下拉列表,其中所有项目只有“System.Web.Mvc.SelectListItem”文本。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

您正在使用的构造函数将其第一个参数视为应在列表中显示的对象列表,并在每个参数上调用ToString以获取相应列表项的文本和值。如果这些对象恰好是SelectListItem个实例 - 它没有任何区别,那么它们将被视为相同。 SelectListItem.ToString未定义,并调用基本实现,即类型的字符串表示形式。这就是您看到"System.Web.Mvc.SelectListItem"列表的原因。

在您的情况下,您不需要构造可枚举的SelectListItem个对象,只需使用SelectList的另一个构造函数:

 var model = new MyModel();
 model.SelectedItemId = somevalue;
 model.PossibleItemsList = new SelectList(
     someSource, "FirstMember", "SecondMember", model.SelectedItemId);
 return View(model);