使用linq获取2列并生成下拉列表

时间:2016-11-07 09:01:56

标签: c# asp.net-mvc linq razor

我想根据2列IdName的值制作一个下拉列表,所以我希望它像<option value=Id">Name</option>,而不仅仅是名字。

我可以得到这样的名字,这很好:

var result = from r in db.Categories
                         select r.Name;

            ViewBag.Categories = result;

@Html.DropDownListFor(model => model.Name, new SelectList(ViewBag.Categories), "Select Category")

但我希望有两个ID和名字,我已经说过了,所以我将我的linq更改为:

var result = from r in db.Categories
                         select new { r.Name, r.Id };

但是我不知道如何使用id和name来下载它?

1 个答案:

答案 0 :(得分:0)

您可以在Action中制作自定义选择列表,并在返回结果之前将其放在ViewBag中。

ViewBag.Categories = new SelectList(db.Categories, "Id", "Name");

这会根据db.Categories为您制作一个列表,并将Id列的值放入&#34;值&#34;和Name作为textnode 如果要更改textnode,则需要创建自定义列表,例如:

List<Categorie> temp = db.Categories.ToList();
Foreach (var t in temp)
   t.Name = String.Format("{0} {1}", t.Id, t.Name);
ViewBag.Categories = new SelectList(temp, "Id", "Name");

在视图中调用时,不要忘记将ViewBag解析为SelectList。

@{
SelectList categories = ViewBag.Categories as SelectList;
}

@Html.DropDownListFor(model => model.Name, categories)