2010-02-11 25 views
1

我有复选框的数组,并试图对其进行过滤,但在没有复选框被选中,它抛出一个System.ArgumentNullException复选框过滤问题,当空

public ActionResult UserEdit(string[] UsergroupIDs) 
    { 

     IEnumerable<Usergroup> userUsergroups = 
      UsergroupIDs.Where(x => x != "false") 
         .Select(x => (Usergroup)_ug.GetUsergroups(int.Parse(x)).FirstOrDefault()); 

我应该如何修改这个吗?

/M

回答

2

将该值设置为一个空表开始,然后将其更改为您查询的结果,如果paremeters不为空。或者,您可以修改您的视图以包含具有默认(false)属性的每个复选框的隐藏字段,以便参数永远不为null。后者是Checkbox辅助方法所做的,因此使用它也可以解决您的问题。更好的是,两者兼而有之。

public ActionResult UserEdit(string[] UsergroupIDs) 
{ 

    IEnumerable<Usergroup> userUsergroups = new List<UserGroup>(); 

    if (UsergroupIDs != null) 
    { 
     userUsergroups = UsergroupIDs.Where(x => x != "false") 
            .Select(x => (Usergroup)_ug.GetUsergroups(int.Parse(x)).FirstOrDefault()); 
    } 

    ... 
} 
+0

是真的,但如果有8个复选框并且全部都是错误的,它会失败吗? :) – 2010-02-11 13:30:13

+0

否。在这种情况下,您会收到一个空集。空情况是当请求中没有传回输入值时。除非选中该复选框,否则不会提交复选框。 – tvanfosson 2010-02-11 15:49:38