2013-04-23 54 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() 
    }