2013-07-25 35 views
2

我有以下型号:为什么我的Html.DropDownList会产生一个填充“System.Web.Mvc.SelectListItem”字符串的列表?

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

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