2013-04-17 50 views
2

好吧我有很多麻煩,我覺得應該很容易。我正在嘗試從表中填充不同值的下拉列表。LINQ截然不同@ Html.DropDownList

此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); 
     } 

回答

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) 
+0

是否可以在沒有ID字段的情況下執行此操作?我真正需要的是將部門名稱顯示在下拉列表中。那麼我只需要建立一個模型,只需要一個財產部門? –

+0

@JamesWilson這完全有可能。檢查我更新的編輯。它只是將部門名稱用作下拉列表中的文本和值。那麼這個模型就有了這個名字。 – mattytommo

+0

我會盡力讓這個工作。 –

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 
    }) 

集合然後將其鏈接到實際的下拉列表:

如果您是通過視圖模型傳遞:

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

如果你通過ViewBag傳遞你的集合(我會遠離這個):

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

另一種選擇你,如果你沒有一個視圖模型視圖中的所有:

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

還檢查了我的問題,我問這裏大約一年前。它應該對你有所幫助: Can't get my DropDownListFor to select a selected SelectListItem item in a Dropdown menu

+0

無法獲取此方法以工作。它似乎在最後選擇與V沒有找到任何東西分解。這就像Intellisense不會將v鏈接到任何東西。 –

+0

你在Viewmodel中是否有「SelectedResultId」,或者你沒有特定View上的模型? ViewBag是唯一的數據來源嗎?此外,我更新了答案 – Shenaniganz

+0

是的,我沒有這個特定的數據模型。我不確定如何做到這一點,因爲這個特定的視圖已經有了一個模型。當你第一次訪問這個頁面時,它會顯示整個表格,並且有一個下拉菜單,選擇這個下拉菜單,我想用它來過濾結果。下拉菜單中包含表格內部的所有部門的明確列表中的數據。 –