0

我在 Gridview 选中复选框时遇到问题,服务器端复选框显示选中 = false。

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

我写了以下代码。

<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;
            }
4

2 回答 2

1

服务器控件的状态保持不变,并且像您使用客户端脚本 ( )viewstate更改复选框的选中状态一样更改控制状态不会在 中更新。因此,当您访问服务器端的控件时,您不会得到更改。您必须将更改存储在一些中,并使用服务器端的隐藏字段来更新您的控件。这是 asp.net 实现.javascriptviewstatehidden fieldviewstate

于 2013-01-01T07:34:46.247 回答
0

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

1)在创建复选框时将有意义的内容附加到复选框的 ID。例如:主键 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.
     }
}
于 2013-01-03T22:26:45.767 回答