2011-11-08 85 views
4

我有兩個單選按鈕都設置爲更新面板的異步觸發器,問題在於第一次單擊時CheckedChanged事件觸發,但無論哪個單選按鈕點擊事件再也不會發生。ASP.NET 4.0單選按鈕檢查更改的事件只觸發一次

標記:

<asp:RadioButton ID="rdoDeliveryBilling" runat="server" Checked="true" GroupName="DeliveryAddress" Text="Deliver to this address" AutoPostBack="true" OnCheckedChanged="rdoDelivery_CheckedChanged" /> 
<asp:RadioButton ID="rdoDeliveryShipping" runat="server" GroupName="DeliveryAddress" Text="Deliver to a different address" AutoPostBack="true" OnCheckedChanged="rdoDelivery_CheckedChanged" /> 
<asp:UpdatePanel ID="panDeliveryAddress" runat="server"> 
<ContentTemplate> 
    ...delivery details form controls and validators goes here... 
</ContentTemplate> 
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="rdoDeliveryBilling" EventName="CheckedChanged" /> 
<asp:AsyncPostBackTrigger ControlID="rdoDeliveryShipping" EventName="CheckedChanged" /> 
</Triggers> 
</asp:UpdatePanel> 

代碼:

protected void rdoDelivery_CheckedChanged(object sender, EventArgs e) 
{ 
    ...only code that enables/disables the delivery form controls and validators goes here... 
} 

我已經設置裏面rdoDelivery_CheckedChanged一個斷點,只命中一次。

任何想法?

回答

13

查看源代碼(在瀏覽器中),ASP.NET僅爲可能回發的RadioButton控件生成回發函數__doPostBack

第一個RadioButton控件無法回發(因爲它已被選中),因此不會生成__doPostBack

解決方法是將兩個RadioButton控件添加到另一個UpdatePanel,將UpdateMode設置爲始終。這將導致RadioButtons被更新(只要他們觸發其他UpdatePanel)將__doPostBack函數添加到取消選中的RadioButton

<asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <asp:RadioButton ID="rdoDeliveryBilling" runat="server" Checked="true" GroupName="DeliveryAddress" Text="Deliver to this address" AutoPostBack="true" OnCheckedChanged="rdoDelivery_CheckedChanged" /> 
     <asp:RadioButton ID="rdoDeliveryShipping" runat="server" GroupName="DeliveryAddress" Text="Deliver to a different address" AutoPostBack="true" OnCheckedChanged="rdoDelivery_CheckedChanged" />    
    </ContentTemplate> 
</asp:UpdatePanel> 

希望這有助於。

+0

謝謝你幫我解決這個問題。我可以按照你的建議做,並將單選按鈕放在更新面板中,或者我還發現另一種解決方案來添加缺少的onclick:radiobutton.Attributes.Add(「onclick」,「javascript:setTimeout('__ doPostBack(''& radiobutton.ClientID.Replace(「_」,「$」)&「\',\'\')',0)」) – johna

+0

此解決方案對我無效。我的單選按鈕已經在更新面板中。我嘗試將更新面板添加到單個單選按鈕(它們位於頁面上的不同位置),但無法使其工作。但至少我知道現在的問題是什麼。感謝您的有用信息。 – Sal

+0

我有兩個更新面板與每個相同的組名中的一個RadioButton和UpdateMode =「總是」我解決了我的問題。謝謝男士 –

相關問題