6

我有一個ASP.Net RadioButtonList控件與AutoPostBack設置爲true。我也有一個OnSelectedIndexChanged函數,每當用戶改變選擇時都會調用它。最後,用戶需要提供請求該控制信息,所以有我默認選擇當用戶到達上page--ASP.Net AJAX UpdatePanel無法觸發SelectedIndexChanged事件

<asp:RadioButtonList ID="rblHighestDegree" runat="server" AutoPostBack="true" 
     onselectedindexchanged="rblHighestDegree_SelectedIndexChanged"> 
    <asp:listitem Runat="server" Text="Master's Degree" Selected="True" /> 
    <asp:listitem Runat="server" Text="Doctorate" /> 
</asp:RadioButtonList> 

在代碼示例如上所述,當從默認用戶切換選擇(例如「碩士學位」)到不同的選項(例如「博士學位」),然後觸發SelectedIndexChanged事件。然後,如果用戶改變主意並隨後選擇原始默認選項,則再次觸發SelectedIndexChanged事件。這是按照預期和預期進行的。

我有一個第二控制其啓用或停用,這取決於選擇的上方,在代碼隱藏...

<asp:ScriptManager ID="scriptmanager1" runat="server" /> 
<asp:UpdatePanel ID="updatepanel1" runat="server"> 
<ContentTemplate> 
<asp:RadioButtonList ID="rdlYearsOfStudy" runat="server" Enabled="false"> 
<asp:listitem Runat="server" Text="Less than 3 years" /> 
<asp:listitem Runat="server" Text="3 - 4 years" /> 
<asp:listitem Runat="server" Text="5 - 6 years" /> 
</asp:RadioButtonList> 
</ContentTemplate> 
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="rblHighestDegree" EventName="SelectedIndexChanged" /> 
</Triggers> 
</asp:UpdatePanel> 

時遇到的問題僅僅後我放置發生這是ASP.Net AJAX UpdatePanel中的第二個控件,用於啓用異步回發(如上所示)。一旦我這樣做了,原始的RadioButtonList控件將只會回發,當我選擇一個ListView時,默認情況下,當用戶到達頁面時選擇而不是。如果用戶隨後選擇原始默認選擇,則回發不會發生。

要澄清,如果我回發沒有將適用的第二個控件放置在ASP.Net AJAX UpdatePanel中,則無論用戶選擇哪個RadioButtonList ListItem,SelectedIndexChanged都可以工作。另一方面,當我在UpdatePanel中放置一個控件來應用AsyncPostBackTrigger之後,回發只發生在非默認ListItems的選擇上。

可能與此相關的更多信息是,我正在使用Microsoft Visual Studio 2008進行編碼,並且我正在使用的UpdatePanel控件是Microsoft AJAX Libary(而不是ASP.NET AJAX Control Toolkit)的一部分。

我將不勝感激與如何讓ASP.Net AJAX的工作,使我可以得到SelectedIndexChanged事件觸發時,用戶選擇默認或非默認的ListItems在RadioButtonList。爲了記錄,我嘗試在page_load事件中設置RadioButtonList默認選擇,但它沒有幫助。

在此先感謝您的幫助!

+0

請注意,我也嘗試刪除在aspx頁面上定義的觸發器,而是在page_load事件中註冊了RadioButtonList控件:「scriptmanager1.RegisterPostBackControl(rblHighestDegree);」不幸的是,這種方法導致了我在上面抱怨的完全相同的行爲。 – cjo30080

+0

如果您查看生成的HTML,您會看到默認選定的廣播沒有設置爲調用__doPostBack的onclick。 –

回答

4

我有同樣的問題,發現生成的HTML沒有默認選擇上的點擊處理程序。列表中的其他單選按鈕都具有點擊處理程序來調用__doPostBack。所以我說這一點的jQuery:

$("#rbl input[checked]").click(function (e) 
{ 
    var id = e.target.id.replace('_', '$'); 
    setTimeout(function() { __doPostBack(id, ""); }, 0); 
}); 

然而,儘管Ajax調用,現在正在按照預期,在服務器端代碼仍未執行的SelectedIndexChanged處理程序。

認爲這可能是因爲服務器知道默認選擇是(什麼),並且看到發佈的選擇是相同的,所以認爲選定的索引沒有改變,所以沒有執行處理程序。

然後我想當選擇其他無線電之一時,服務器應該通過視圖狀態記住它。這讓我想起我的radiobuttonlist容器上有viewstatemode="Disabled"。所以我在radiobuttonlist上設置了viewstatemode="Enabled",它現在按預期工作。

+0

謝謝你的迴應。我給了它一個鏡頭,但不幸的是,在radiobuttonlist上設置viewstatemode =「Enabled」並沒有改變行爲或解決我的問題。 – cjo30080

+0

僅僅啓用視圖狀態是不夠的。你是否附加客戶端點擊處理程序來調用__doPostBack? –

0

我有這個問題,所以它解決了這個問題,你必須在C#代碼(加載頁面)和html標記中設置AutoPostBack和SelectedIndexChange事件處理程序。對於如:

protected void Page_Load(object sender, EventArgs e) 
    { 
      rblHighestDegree.AutoPostBack = true; 
      rblHighestDegree.SelectedIndexChanged += 
      new EventHandler (rblHighestDegree_SelectedIndexChanged); 
    } 

,而在HTML:

<asp:RadioButtonList ID="rblHighestDegree" runat="server" AutoPostBack="true" 
    onselectedindexchanged="rblHighestDegree_SelectedIndexChanged"> 
+0

只設置autopostback tot rue爲我工作... –

0

我建的單選按鈕列表在後面的代碼,並且不放過的SelectedIndex = 0,則在onload事件我打電話使用JavaScript的第一個項目的點擊()。這是最適合我的最簡單的事情。

0

我知道這是一個老問題,但正如Jeff Shepler所說,默認選項沒有單擊處理程序,並且部分回發不會創建一個。

我通過在UpdateModel =「Always」(這是默認值)的新更新面板中包裝第一個radiobuttonlist,以便通過任何回發來更新它。

由於特定的表單佈局,我無法使用將兩個單選按鈕列表放在同一更新面板中的解決方案。

相關問題