2013-01-01 39 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. 
    } 
}