我在列表框中预选Items的问题。
我正在使用mvc 3的剃刀查看引擎。我知道有一些同样的问题的帖子,但他们不适合我。
我正在使用mvc 3的剃刀查看引擎。我知道有一些同样的问题的帖子,但他们不适合我。
类别代码:
public class Foo{ private int _id; private string _name; public string Name{ get{ return _name; } public int Id { get{ return _id; } }
型号代码:
public class FooModel{ private readonly IList<Foo> _selectedFoos; private readonly IList<Foo> _allFoos; public IList<Foo> SelectedFoos{ get{ return _selectedFoos;} } public IList<Foo> AllFoos{ get{ return _allFoos;} } }
cshtml中的代码:
@Html.ListBoxFor(model => model.Flatschels,Model.AllFlatschels.Select(fl => new SelectListItem { Text = fl.Name,Value = fl.Id.ToString(),Selected = Model.Flatschels.Any(y => y.Id == fl.Id) }),new {Multiple = "multiple"})
我尝试了许多其他的东西,但没有任何工作。希望有人可以帮忙
解决方法
我不能真正解释为什么,但我设法让它工作。这两个工作之一:
@Html.ListBoxFor(m => m.SelectedFoos,new MultiSelectList(Model.AllFoos,"ID","Name"),new {Multiple = "multiple"}) @Html.ListBoxFor(m => m.SelectedFoos,Model.AllFoos.Select(f => new SelectListItem { Text = f.Name,Value = f.ID }),new {Multiple = "multiple"})
问题似乎是SelectListItem上的Selected属性被忽略,而是正在调用ToString()(!)方法,所以如果你需要将它添加到你的Foo类中:
public override string ToString() { return this.ID; }
我猜测它与能够持续跨请求(将被压平到字符串被传递通过线)有关,但这有点混乱!