使用下面的代码我得到了这个:
<select id="ClarderSousSecteurID" name="ClarderSousSecteurID">
<option value="">--- Tous ---</option>
<option value="23">23</option>
<option value="46">46</option>
<option value="29">29</option>
....
</select>
我错过了这个:
<select id="ClarderSousSecteurID" name="ClarderSousSecteurID">
<option value="">--- Tous ---</option>
<option value="23">Libelle No 1</option>
<option value="46">Libelle No 2</option>
<option value="29">Libelle No 3</option>
....
</select>
查看:
Sous-secteur Clarder : @Html.DropDownList("ClarderSousSecteurID", "--- Tous ---")
Controler:
var data = from p in db.tblUSUAs
join f in db.tblClarderSousSecteur
on p.ClarderSousSecteurID equals f.ClarderSousSecteurID
select new
{
ClarderSousSecteurID = p.ClarderSousSecteurID,
ClarderSousSecteurLibelle = f.ClarderSousSecteurLibelle
};
ViewBag.ClarderSousSecteurID = new SelectList(data.Select(a => a.ClarderSousSecteurID).Distinct().Select(c => new { ClarderSousSecteurID = c, ClarderSousSecteurLibelle = c }), "ClarderSousSecteurID", "ClarderSousSecteurLibelle", ClarderSousSecteurID);
非常感谢你。 Nacer T。
答案 0 :(得分:0)
查看您传递给SelectList
构造函数的数据。
data.Select(a => a.ClarderSousSecteurID)
.Distinct()
.Select(c => new { ClarderSousSecteurID = c, ClarderSousSecteurLibelle = c })
您只选择ClarderSousSecteurID
中的data
项。所以表达式data.Select(a => a.ClarderSousSecteurID)
将为您提供一个Integers的集合(IQueryable of int),并且您在Select
和ClarderSousSecteurID
值的后期ClarderSousSecteurLibelle
中使用该结果。这就是您获得选项文本和值的ClarderSousSecteurID
值的原因。
如果您的加入为您提供了独特的结果,则根本不需要进行“区别”通话。您可以将结果转换为SelectListItem列表
var data = (from p in db.tblUSUAs
join f in db.tblClarderSousSecteur
on p.ClarderSousSecteurID equals f.ClarderSousSecteurID
select new SelectListItem
{
Value = p.ClarderSousSecteurID.ToString(),
Text = f.ClarderSousSecteurLibelle
}).ToList();
ViewBag.ClarderSousSecteurID = new SelectList(data, "Value","Text", ClarderSousSecteurID);
但是,如果您的LINQ联接为您提供了非唯一的记录,并且您仍希望基于ClarderSousSecteurID列值执行不同的操作,则可以在ClarderSousSecteurID
属性上执行分组并将结果转换为SelectListItem的集合。
List<SelectListItem> uniqueListById = data.GroupBy(s => s.ClarderSousSecteurID,
p => p,
(k, v) => new SelectListItem {
Value = k.ToString(),
Text = v.FirstOrDefault().ClarderSousSecteurLibelle })
.ToList();
您可以根据需要将此数据用于下拉列表。
ViewBag.ClarderSousSecteurID = new SelectList(uniqueListById, "Value","Text",
ClarderSousSecteurID);