为什么我的Html.DropDownList会生成一个充满“;System.Web.Mvc.SelectListItem

本文关键字:一个 System SelectListItem Mvc Web DropDownList Html 我的 为什么 | 更新日期: 2023-09-27 18:24:49

我有以下模型:

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

我做错了什么?

为什么我的Html.DropDownList会生成一个充满“;System.Web.Mvc.SelectListItem

您使用的构造函数将其第一个参数视为应显示在列表中的对象列表,并对每个对象调用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);
相关文章: