【问题标题】:Fetch 2 columns with linq and make a dropdown list使用 linq 获取 2 列并创建一个下拉列表
【发布时间】:2016-11-07 09:01:55
【问题描述】:

我想根据 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 的下拉列表?

【问题讨论】:

  • ViewBag.Categories = new SelectList(db.Categories, "Id", "Name"); 和视图中的@Html.DropDownListFor(m => m.Name, new (SelectList)ViewBag.Categories, "Select Category")
  • 我在视图中的(SelectList) 下看到一条红线,表示它是一种在当前上下文中无效的类型。
  • 对不起 - 删除前面的new
  • 就是这样,谢谢!为什么不把这个作为答案,这对像我这样的新手很重要?另外,如果您不介意,我将如何遍历视图中的 ViewBag 以从中获取 id 和 name?
  • 你是什么意思loop thru that ViewBag - 你为什么要这样做? (也可以参考this question/answer

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


【解决方案1】:

您可以在 Action 中创建自定义 SelectList 并将其放入 ViewBag 中,然后返回结果。

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

这将根据db.Categories 为您创建一个列表,并将Id 列的值放入“value”,将Name 作为文本节点。
如果要更改文本节点,则需要创建一个自定义列表,例如:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多