2013-04-23 45 views
1

值我有這將有三個複選框形式,說:過濾LINQ檢查在MVC

@Html.CheckBox("Active", true) 
@Html.CheckBox("Closed", false) 
@Html.CheckBox("Finalized", false) 

...並映射到這些默認值(也許這不是最好的方法)

控制器
public ActionResult TempView(bool Active = false, bool Closed = false, bool Finalized = false) 
    { .... } 

...然後點擊一個按鈕來應用過濾器來產生一些AJAX魔法,並從表格中選擇一些屬性來自過濾器的選中值。

我得無處,除了一堆If Active is checked, WHERE Property = Active, Or If Closed is checked, WHERE Property = Closed [...]

是否有LINQ容易地實現與多個布爾值來做到這一點?用戶可以在同一時間(不只是一個或其他)

+1

使用單選按鈕而不是複選框。對於您的特定場景,複選框在語義上不正確。 – 2013-04-23 20:44:08

+0

那是怎麼回事?單選按鈕將假定只有一個值被選中;然而,用戶可以同時檢查所有三個(活動,關閉,敲定) – Tom 2013-04-23 20:45:19

+0

啊,對不起,不知道。那麼,每個複選框都是您數據模型(表格)中自己的布爾字段。這有幫助嗎?否則,它將成爲你的'Property'中的位掩碼標誌,這將是一團糟。 – 2013-04-23 20:46:02

回答

0

要解決選擇所有三個箱,我創建了一個新的類型,SummaryFilterInfo,它看起來像這樣:

public class SummaryFilterInfo 
{ 
    public List<State> States { get; set; } 
    public List<State> StateSelection { get; set; } 

    public SummaryFilterInfo() 
    { 
     var stateList = new StateList(); 
     States = new List<State>(); 
     StateSelection = stateList.GetAllStates(); 
    } 
} 

然後我用StateSelection填充複選框的數組,名稱類似:

SummaryFilterInfo_States[0] 

我的控制器的定義是這樣的:

public ActionResult Index(SummaryFilterInfo summaryFilterInfo) 
    { 
     ... 
     var filtered = all 
         .Where(e => summaryFilterInfo.States.Contains(e.State)).ToList() 
    }