2015-04-29 34 views
1

我想問一下,如何在複選框中選擇的項目將用於在MVC中進行linq查詢。 我有這個在我看來,在我顯示所有可能的選項,其中用戶將只是簡單地選擇將用於生成報告的軟件類型。使用MVC中的複選框查詢選定項目

@using (Ajax.BeginForm("Create_Report", "Softwares", 
      new AjaxOptions 
      { 
       HttpMethod = "POST", 
       InsertionMode = InsertionMode.Replace, 
       UpdateTargetId = "target2" 
      })) 
     { 
      @Html.ValidationSummary(true) 
      <p>For A Reports: Kindly check softwares to create reports.</p><br /> 
      foreach (var item in Model) { 
       <input type="checkbox" value="@item.software_name" name="software_type"/>@item.software_name 
       <br /> 
      } 


      <input type="submit" value="Create Report"/> 

     } 

在那之後,我想如果用戶選擇的Adobe專業版,Adobe Illustrator中,MS Visio和Acrobat中所選擇的軟件類型將在例如像用於查詢中,查詢應該像「從選擇軟件_table其中software__type =「的Adobe臨」 & & software_type =「Adobe Illustrator的& &」,所以堡壘。

是否有利用的複選框選中的項目,縮短查詢的任何方式?任何幫助深表感謝。

+0

您正在獲取所選項目,對?只顯示控制器動作,然後,不是html – Shoe

+0

使用'.Contains()' –

+0

我是MVC中的新手。我喜歡問我是否要將選定的項目傳遞給控制器​​。我應該把它放在一個數組中,然後在查詢中使用它嗎? – Isay

回答

0

假設你的POST方法是

[HttpPost] 
public ActionResult Create_Report(string[] software_type) 

然後software_type將包含所選擇的值的陣列,從而可以使用.Contains()到過濾查詢

var items = db.Software.Where(s => software_type.Contains(s.software_type)) 

注意:從你的屬性中刪除那些可怕的下劃線,並遵循正常的命名約定(SoftwareType,SoftwareName等或簡單地鍵入,名稱等,因爲它們已經在一個名爲Software的類中)

+0

非常感謝你@Stephen。太棒了!它的工作原理! – Isay

0

您需要定義一個集合以存儲所選項目,並使用模型綁定將選定項目映射到此屬性。

//store checked Items 
public IEnumerable<string> SelectedSoftware { get; set; } 
//check box list items 
public List<string> SoftwareList = new List<string>(); 

foreach (var item in Model.SoftwareList) 
    { 
     <input type="checkbox" name="SelectedSoftware" value="@item">@item 

    } 
在控制器

public ActionResult Create_Report(string[] SelectedSoftware) 
    { 
     //do action 
    } 
+0

查詢過程中會發生什麼情況? – Isay

相關問題