2

我有以下模型:

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”文本。

我究竟做错了什么?

4

1 回答 1

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);
于 2013-07-25T12:57:48.533 回答