LINQ与@ Html.DropDownList不同

时间:2013-04-17 21:44:01

标签: c# linq razor

好的,我觉得应该很容易,我遇到了很多麻烦。我正在尝试使用表中的不同值填充下拉列表。

这个linq提供了每个下拉选项所需的部门列表。

IPACS_Master_Lists
   .Where (x => (x.Department != null))
   .Select (s => s.Department)
   .Distinct ()
   .Select (v => v)

如何制作下拉列表?

我已经尝试过使用@ Html.DropDownList,但似乎无法正常工作。

我的控制器如下。我尝试将其传递给ViewBag,但无法使其工作。

public ActionResult Index()
        {
            var docs = db.IPACS_Master_List;
            ViewBag.Departments = new SelectList(db.IPACS_Master_List.Where(x => (x.department != null)).Select (s => s.department).Distinct().Select (v => v), "id", "department", 0);
            return View(docs);
        }

2 个答案:

答案 0 :(得分:3)

不要使用ViewBag,每次使用它时,小猫都会死亡。

说真的,这是真的不良做法。

首先,在您的模型中假设:

public class MyModel
{
   public List<Documents> Docs { get; set; } //don't know what type this is
   public List<SelectListItem> Departments { get; set; }
   public string Department { get; set; } //this holds what you select in the view
}

然后将您的操作更改为:

public ActionResult Index()
{
    MyModel model = new MyModel();
    model.Docs = db.IPACS_Master_List;
    model.Departments = db.IPACS_Master_List
       .Where(x => x.department != null)
       .Select(s => s.department)
       .Distinct()
       .Select(s => new SelectListItem
           {
               Text = s.Name,
               Value = s.Name
           })
       .ToList();

        return View(model);
}

然后让您的视图使用模型MyModel

然后你可以这样做:

@Html.DropDownListFor(m => m.Department, Model.Departments)

答案 1 :(得分:1)

将您的收藏集转换为<SelectListItem>

的集合
var myResult = IPACS_Master_Lists.Where (x => (x.Department != null))
   .Select (s => s.Department)
   .Distinct ()
   .Select (v => new SelectListItem{
    Value = v.ResultIdField,
    Text = v.ResultNameField
    })

然后将其链接到实际的下拉列表:

如果您通过ViewModel传递:

@Html.DropDownListFor(model=>model.SelectedResultId, @Model.myResult ,"- Select One")

如果你通过ViewBag传递你的收藏(我会远离这个):

@Html.DropDownListFor(model=>model.SelectedResultId, @ViewBag.myResult ,"- Select One")

如果视图中根本没有ViewModel,则为您提供另一种选择:

@Html.DropDownList("selectListName", ViewBag.myResult, new {id = "selectListId"})

另请查看我在大约一年前问过的问题。它应该会帮助你: Can't get my DropDownListFor to select a selected SelectListItem item in a Dropdown menu