【问题标题】:Why would my Html.DropDownList yield a list filled with "System.Web.Mvc.SelectListItem" strings?为什么我的 Html.DropDownList 会产生一个充满“System.Web.Mvc.SelectListItem”字符串的列表?
【发布时间】:2013-07-25 12:49:36
【问题描述】:

我有以下型号:

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多