2013-11-04 26 views
0

有沒有辦法用Razor創建DropDownList並將第二個參數作爲Linq結果而不是默認空項目?Razor DropDownList爲每個和所有元素

的關鍵是,我使用的是蓄電池的功能(「功能」),所以我不能爲空進入它(作爲一個問題的答案 - Alternative for multiple IF/CASE statements

如果DropDownList的不適合我會很感激替代。

控制器:

 public ActionResult Index(string searchFullName, string searchExtension, string searchProject) 
     { 
      var extensionList = new List<string>(); 
      var projectList = new List<string>(); 

      var projects = from n in unitofwork.DomainRepository.Get() 
          select n.Project; 
      var extensions = from n in unitofwork.DomainRepository.Get() 
          select n.Extension; 

      extensionList.AddRange(extensions.Distinct()); 
      projectList.AddRange(projects.Distinct()); 

      ViewBag.searchproject = new SelectList(projectList); 
      ViewBag.searchExtension = new SelectList(extensionList); 

      return View(unitofwork.DomainRepository.Filter(n => n.Name.Contains(searchFullName), n => n.Extension == searchExtension)); 
      } 

「過濾器」 的方法:

public virtual IEnumerable<T> Filter(params Expression<Func<T, bool>>[] filters) 
     { 
      IQueryable<T> query = dbSet; 

      return filters.Aggregate(query, (a, b) => a.Where(b)); 
     } 

查看:

@using (Html.BeginForm()) { 
    <p> 
     Name: @Html.TextBox("searchFullName") 
     Extension: @Html.DropDownList("searchExtension", "All") <- *would like to get one extension or all extensions* 
     Projects: @Html.DropDownList("searchProject","All") 
     <input type="submit" value="Filters" /> 
    </p> } 
+0

林不知道即時得到您的權利... ...請你要什麼有在DDL每2例? – LINQ2Vodka

+0

作爲DDL的一部分,我需要有一個選項可以將列表中的所有項目作爲「索引」的參數傳遞給 –

+0

您可以爲View創建任何類型的Model並在View中使用它的屬性。它有幫助嗎? – LINQ2Vodka

回答

0

篩選方法使用德爾egates需要參數來構建Linq查詢。

問題在於DDL在選擇DDL中的「所有」項目時結果爲空。因爲Linq得到一個null,所以像n => n.Name == null這樣的表達式顯然不起作用。

爲了對付我使用鏈接的問題CodeMaster的提示無效參數:

return View(unitofwork.DomainRepository.Filter(n => n.Name.Contains(searchFullName), n => (String.IsNullOrEmpty(searchExtension) || n.Extension == searchExtension), n => (String.IsNullOrEmpty(searchProject) || n.Project == searchProject)));