2013-01-01 43 views
0

我在Gridview中遇到问题复选框选中,服务器端复选框显示checked = false。复选框检查不在Gridview的服务器端工作

它真的很奇怪,我还没有见过。

我写了下面的代码。

<script type="text/javascript"> 
     function SelectAll() { 
      if ($('.SelectAll input:checkbox').attr("checked")) 
       $('.chkTechs input:checkbox').attr("checked", true); 
      else 
       $('.chkTechs input:checkbox').attr("checked", false); 
     } 
     function SetCheckBoxes(item) { 
      //$(item).attr("target").checked // this is to find which element clicked 
      if ($('.chkTechs input:checkbox').filter(":not(:checked)").length > 0) { 
       $('.SelectAll input:checkbox').attr("checked", false) 
      } 
      else { 
       $('.SelectAll input:checkbox').attr("checked", true) 
      } 

     } 
    </script> 

服务器端的按钮单击

foreach (GridViewRow row in gvList.Rows) 
      { 
       CheckBox Checked = (CheckBox)row.FindControl("chkSelect"); 
       bool isChecked = ((CheckBox)row.FindControl("chkSelect")).Checked; 
      } 
+0

请给我们展示一下asp代码是否使用ajax?它更好地使用客户端,即JavaScript来选择所有复选框 – skhurams

回答

1

服务器控件的状态保持在viewstate和改变控制的状态,就像你与客户端脚本(javascript)改变复选框的选中状态不更新于viewstate。所以当你访问服务器端的控件时,你不会得到改变。您必须将更改存储在某些hidden field中,并使用服务器端的隐藏字段更新控件。这是asp.net执行viewstate的方式。

0

您必须通过检查相应复选框的Request.Form [xxx]参数的存在来获取它们的值。在你的情况下[chkSelectXXX]。

1)在创建复选框时在其中添加一些有意义的内容。例如:主键值val使复选框的ID应为[chkSelect_PKValue1]

2)在服务器端循环通过Request.Form变量,并检查是否存在具有以chkSelect开头的键值的变量。类似这样的:

foreach(var x in Request.Form) 
{ 
    if(x.StartsWith("chkSelect")) 
    { 
      //3. Then this checkbox is selected you should parse the 
      //PK value and do what's necessary. 
    } 
}