Dot-Net
多選列錶框中的預選項目(MVC3 Razor)
我在列錶框中預選項目時遇到問題。我正在使用帶有 mvc 3 的 razor 視圖引擎。我知道有一些文章存在相同的問題,但它們對我不起作用。
類中的程式碼:
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; }我猜這與能夠跨請求持續存在有關(這將被展平為要通過網路傳遞的字元串),但這有點令人困惑!