为什么我的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"文本。
我做错了什么?
您使用的构造函数将其第一个参数视为应显示在列表中的对象列表,并对每个对象调用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);