Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.Net MVC4中为列表框设置预选?_C#_Asp.net Mvc_Asp.net Mvc 4_Listbox - Fatal编程技术网

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);