今天我在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: SelectedList也是:
感谢帮助我
答案 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)