SelectList默认值不起作用

时间:2014-12-04 13:20:15

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

今天我在ASP.NET中使用SelectList的默认值时遇到了问题。

这是我在尝试了很多在互联网上找到的东西后的表现:

@{
  IEnumerable<SelectListItem> secteurSelectList = from x in Model.secteurList select new SelectListItem {
                                       Selected = (x.Id == this.GetSessionSecteurId()),
                                       Text = x.Secteur,
                                       Value = x.Id.ToString()
                                   };
  SelectList selectList = new SelectList(secteurSelectList, "Value", "Text", secteurSelectList.Where(x => x.Selected==true).FirstOrDefault().Value); }
  @Html.DropDownListFor(m => m.secteur, selectList)

以下是我的实体的描述: 在ViewModel中我使用

public List<AuditSecteur> secteurList { get; set; }

这是AuditSecteur的对象:

public class AuditSecteur
{
    public int Id { get; set; }
    public string Secteur { get; set; }
}

结果如下:

<select data-val="true" data-val-number="The field Secteur de l'audit must be a number." data-val-required="The Secteur de l'audit field is required." id="secteur" name="secteur">
    <option value="1">option1</option>
    <option value="2">option2</option>
    <option value="3">option3</option>
</select>

SecteurSelectedList对于所选的项目,其中一项为true: one item selected SelectedList也是: one item seledted too

感谢帮助我

2 个答案:

答案 0 :(得分:1)

使用强类型帮助程序的全部目的是绑定您的模型属性,所以在

的情况下
@Html.DropDownListFor(m => m.secteur, selectList)

如果secteur的值与您的某个选项的值不匹配,则不会被选中(实际上因为它找不到匹配项,所以会选择第一个选项,因为需要选择某些内容)

但是您的代码还存在许多其他问题。首先,您创建IEnumerable<SelectListItem>(设置Selected属性是没有意义的,因为它被帮助程序忽略),然后您根据第一个创建另一个IEnumerable<SelectListItem>SelectList)下一行(最重要的是什么?)。生成的选项的值基于ID的{​​{1}}属性,但随后绑定到AuditSecteur属性,因此它永远不会回发正确的值。它不是很清楚你如何使用它(你没有包括你的模型,控制器或视图),但正确的方法将是像

查看模型

Secteur

控制器

public class SecteurVM
{
  [Display(Name = "Secteur")]
  [Required]
  public int? SelectedSecteur { get; set; }
  public SelectList SecteurList { get; set; }
}

查看

public ActionResult Create()
{
  List<AuditSecteur> secteurList = // get AuditSecteur items from the database
  SecteurVM model = new SecteurVM();
  model.SecteurList = new SelectList(secteurList, "ID", "Secteur");
  model.SelectedSecteur = // set the default value you want selected here
  return View(model)
}

[HttpPost]
public ActionResult Create(SecteurVM model)
{
  // model.SelectedSecteur contains the ID of the selected item
}

如果@model SecteurVM .... @Html.LabelFor(m => m.SelectedSecteur) @Html.DropDownListFor(m => m.SelectedSecteur, Model.SecteurList, "--Please select--") @Html.ValidationMessageFor(m => m.SelectedSecteur) 的值与列表中项目的SelectedSecteur属性之一匹配,那么这是显示视图时将选择的选项。

答案 1 :(得分:0)

您将DropDown绑定到模型的secteur属性,而下拉列表的值属性为Id,因此下拉菜单在进行预选时不会找到相应的值。

此处,即使您在呈现时已定义pre-selected项目reset,因此我建议您将下拉列表绑定到Id而不是secteur

@Html.DropDownListFor(m => m.Id, selectList)