C# 在ASP.Net MVC4中为列表框设置预选?
在我看来,我有C# 在ASP.Net MVC4中为列表框设置预选?,c#,asp.net-mvc,asp.net-mvc-4,listbox,C#,Asp.net Mvc,Asp.net Mvc 4,Listbox,在我看来,我有 <div class="form-group"> <div> @Html.LabelFor(m => m.DoctorList, new { @class = "control-label" }) </div> <div> @Html.ListBoxFor(m => m.DoctorList, new MultiSelectList((List<SelectL
<div class="form-group">
<div>
@Html.LabelFor(m => m.DoctorList, new { @class = "control-label" })
</div>
<div>
@Html.ListBoxFor(m => m.DoctorList, new MultiSelectList((List<SelectListItem>)ViewBag.DoctorList, "Value", "Text", ((List<string>)(ViewBag.DoctorsSelected)).ToArray()), new {style="display:block;height:20.0em;", @class = "form-control", Multiple = "multiple"})
</div>
</div>
仍然没有预选
有人知道怎么做吗?我用的是MVC4
谢谢绑定到的属性和选择列表不能使用相同的名称。您的模型应该有一个属性(例如) 还要注意的是,
ViewBag.DoctorList
已经是IEnumerable
,因此在视图中使用new SelectList()
从它创建一个相同的新IEnumerable
是毫无意义的额外开销
编辑(响应OP查询,了解名称为何必须不同)
ListBoxFor()
的工作方式是
ViewDataDictionary
(在您的情况下
ViewDataDictionary
是List
)选择列表
在第二个参数中提供(用于设置所选的
基于绑定值的每个SelectListItem的属性
至)
值为每个
元素生成html,
文本
和所选
每个选择列表项的属性
SelectListItem
时,它会检查您绑定的属性中是否有任何值与SelectList
的Value
属性匹配,但您的值是“System.Web.Mvc.SelectListItem”
(它们是复杂对象,因此使用对象的.ToString()
值)而且您的SelectListItems
中没有一个的值是“System.Web.Mvc.SelectListItem”
(只是“Doctor1
”、“Doctor2”
等),因此Selected
属性是false
,因此,
元素中没有一个设置了Selected=“Selected”
属性
以上是一个简化的解释,如果您想了解它是如何工作的,您可以。绑定到的属性和
选择列表不能使用相同的名称。您的模型应该有一个属性(例如)
还要注意的是,ViewBag.DoctorList
已经是IEnumerable
,因此在视图中使用new SelectList()
从它创建一个相同的新IEnumerable
是毫无意义的额外开销
编辑(响应OP查询,了解名称为何必须不同)
ListBoxFor()
的工作方式是
从中获取绑定到的属性的值
ViewDataDictionary
(在您的情况下
ViewDataDictionary
是List
)
从选择列表
在第二个参数中提供(用于设置所选的
基于绑定值的每个SelectListItem的属性
至)
根据值为每个
元素生成html,
文本
和所选
每个选择列表项的属性
在您的情况下,在创建每个SelectListItem
时,它会检查您绑定的属性中是否有任何值与SelectList
的Value
属性匹配,但您的值是“System.Web.Mvc.SelectListItem”
(它们是复杂对象,因此使用对象的.ToString()
值)而且您的SelectListItems
中没有一个的值是“System.Web.Mvc.SelectListItem”
(只是“Doctor1
”、“Doctor2”
等),因此Selected
属性是false
,因此,
元素中没有一个设置了Selected=“Selected”
属性
以上是一个简化的解释,如果您想了解这一切是如何工作的,您可以。好吧,您是对的,“绑定到的属性和选择列表不能使用相同的名称”。但是为什么?这需要大约一页或两页的时间来详细解释:)-但是我想知道我是否可以在以后添加一个简化的解释(需要休息一个小时或两个小时)请参阅更新以了解为什么使用相同的名称不起作用。嗯,你是对的,“你不能对绑定到的属性和选择列表使用相同的名称”。但是为什么呢?这将需要一页或两页来详细解释:)-但我想知道我是否可以在以后添加一个简化的解释(需要休息一个小时或两个小时)请参阅更新以了解为什么同名不起作用。
public static List<SelectListItem> GetDoctorList()
{
List<SelectListItem> ret = new List<SelectListItem>();
// load doctors from database
// for now, fake data
for (int k = 1; k <= 30; k++)
{
string n = "Doctor" + k.ToString();
ret.Add(new SelectListItem() { Value = n, Text = n });
}
return ret;
}
List<string> doctorsSelected = new List<string>();
doctorsSelected.Add("Doctor1");
doctorsSelected.Add("Doctor5");
ret.Add(new SelectListItem() { Value = n, Text = n, Select = true });
public IEnumerable<string> SelectedDoctors { get; set; }
@Html.ListBoxFor(m => m.SelectedDoctors, (IEnumerable<SelectListItem>)ViewBag.DoctorList)
model.SelectedDoctors = new List<string> { "Doctor1", "Doctor5" };
return View(model);