2014-09-23 55 views
0

OnCheckedChanged事件在每次不同控件的回發時觸發。我怎樣才能防止它?OnCheckedChanged正在處理每個回發事件。如何防止呢?

就像我想onCheckedChanged只能使用複選框。如何防止其他控件在回發中觸發此事件?

ASPX:

<asp:TemplateField HeaderText="Show on Order" 
    HeaderStyle-HorizontalAlign="left" ItemStyle-HorizontalAlign="center" 
    ItemStyle-Width="15%"> 
    <ItemTemplate> 
     <asp:CheckBox ID="chkShowOnOrder" runat="server" AutoPostBack="true" 
      Checked='<%# Bind("Show_Order") %>' 
      OnCheckedChanged="chkShowOnOrder_CheckedChanged" 
      ToolTip='<%# Bind("Document_ID") %>'> 
     </asp:CheckBox> 
    </ItemTemplate> 
</asp:TemplateField> 

C#

protected void chkShowOnOrder_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox checkbox = (CheckBox)sender; 
    int docID = Convert.ToInt32(checkbox.ToolTip); 
    TableRow tr = (TableRow)checkbox.Parent.Parent; 

    /*Some other code below.*/ 
} 

同樣的問題被要求在此post,但我沒有得到它。 請幫助。

+0

如果複選框已更改,則該事件將在每次回發時觸發,但無法阻止該事件。如果您想更改複選框以導致回發,請在複選框上設置AutoPostBack =「true」。 – 2014-09-23 10:23:10

+0

該事件按預期觸發複選框,但它也在每次不同控件的回發時觸發。像點擊Linkbutton也會調用Checkbox的onCheckedChanged事件。 – 2014-09-23 10:27:06

+0

點擊一個Linkbutton不會觸發CheckChanged,即使是複選框(除非您還將它連接到linkbutton點擊事件或類似事件),但是如果複選框自上次回發後發生更改,則該事件將在下一個回傳中觸發,而不管哪個控件導致回發。 – 2014-09-23 10:32:15

回答

0

Radio button checked changed event fires twice 你可以驗證其控制是造成的CheckedChanged事件觸發如下

protected void chkShowOnOrder_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox cb= sender as CheckBox ; 
    if (cb != null && cb.ID=="chkShowOnOrder") 
    { 
     //Your code here 
    } 
} 
+0

我也嘗試了這種方法,但這種解決方案有一個性能錯誤。意味着如果我在我的頁面上有25個複選框,那麼這個代碼塊將運行25次。即使回發呼叫不是來自原始複選框。但它會調用這個塊25次。 我已經在調試模式下運行它來檢查它的性能。 – 2014-09-23 10:31:31

0

可以檢查

Request.Form["__EVENTTARGET"] 

值要知道哪個控件打響了事件。因此可以檢查使用該值。

相關問題