6

mam kontrolę ASP.Net RadioButtonList z AutoPostBack wartość true. Mam również funkcję OnSelectedIndexChanged, która jest wywoływana za każdym razem, gdy użytkownik zmienia zaznaczenie. Wreszcie, użytkownik jest zobowiązany do dostarczania informacji wymaganych dla tej kontroli, więc mam wybór domyślnego, gdy użytkownik dotrze na page--ASP.Net AJAX UpdatePanel nie potrafi SelectedIndexChanged zdarzenie wyzwalające

<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> 

W przykładowym kodzie powyżej, gdy użytkownik przechodzi z domyślnego wybór (np. "Master's Degree") do innej opcji (np. "Doktorat"), następuje wywołanie zdarzenia SelectedIndexChanged. Następnie, jeśli użytkownik zmieni zdanie, a następnie wybierze oryginalną opcję domyślną, zdarzenie SelectedIndexChanged zostanie ponownie uruchomione. Działa to dokładnie tak, jak było to zamierzone i oczekiwane.

mam drugą kontrolę, która włączyć lub wyłączyć, w zależności od wyboru powyżej, w kodzie-za ...

<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> 

Problem mam tylko występuje tylko po Umieściłem to drugie sterowanie w ramach Ajax Update ASP.Net, aby włączyć asynchroniczny oddzwonienie (jak pokazano powyżej). Gdy to zrobię, oryginalna kontrolka RadioButtonList będzie odkładać tylko po wybraniu elementu ListItem, który był , a nie wybrany domyślnie po pojawieniu się użytkownika na stronie. Jeśli użytkownik wybierze pierwotny wybór domyślny, odświeżenie nie nastąpi.

Aby wyjaśnić, jeśli ogłaszanie zwrotne bez umieszczania odpowiedniego drugiego sterowania w ASP.Net AJAX UpdatePanel, a następnie SelectedIndexChanged działa bez względu na RadioButtonList ListItem użytkownik wybiera. Z drugiej strony, po umieszczeniu kontrolki wewnątrz UpdatePanel, aby zastosować AsyncPostBackTrigger, oddzwonienie ma miejsce tylko w przypadku wyborów innych niż domyślne ListItems.

Więcej informacji, które mogą być istotne, to to, że koduję w Microsoft Visual Studio 2008, a kontrolka UpdatePanel, której używam, jest częścią Microsoft AJAX Libary (nie jest to AJAX Control Toolkit ASP.NET).

Byłbym wdzięczny za wszelkie informacje, jak uzyskać ASP.Net AJAX działać tak, że mogę uzyskać SelectedIndexChanged zdarzenia do ognia, gdy użytkownik wybierze domyślne lub nie domyślne ListItems w RadioButtonList. Dla zapisu próbowałem ustawić domyślną selekcję RadioButtonList w zdarzeniu page_load, ale to nie pomogło.

Z góry dziękuję za wszelką pomoc!

+0

Zauważ, że próbowałem również usunąć wyzwalacze zdefiniowane na stronie aspx, a zamiast tego zarejestrowałem kontrolkę RadioButtonList w zdarzeniu page_load: "scriptmanager1.RegisterPostBackControl (rblHighestDegree);" Niestety, podejście to spowodowało dokładnie to samo zachowanie, na które skarżyłem się powyżej. – cjo30080

+0

Jeśli spojrzysz na wygenerowany kod HTML, zobaczysz, że domyślne wybrane radio nie ma opcji onclick, aby wywoływać __doPostBack. –

Odpowiedz

4

miałem ten sam problem i okazało się, że wygenerowany HTML nie posiada obsługi kliknij na wybór domyślnej. Pozostałe przyciski opcji na liście mają programy do obsługi kliknięć, aby wywołać __doPostBack. Więc dodałem ten kawałek jQuery:

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

Jednak, mimo że wywołanie ajax teraz działa zgodnie z oczekiwaniami, kod po stronie serwera nie została jeszcze wykonanie obsługi SelectedIndexChanged.

Myślenie, że może tak być, ponieważ serwer wie, jaki jest domyślny wybór (był) i widzi, że wysłana selekcja jest taka sama i dlatego uważa, że ​​wybrany indeks nie został zmieniony, a więc nie wykonał procedury obsługi.

Wtedy pomyślałem, że gdy został wybrany jeden z pozostałych radiotelefonów, serwer powinien pamiętać, że przez stan wyświetlania. Co spowodowało, że zapamiętałem, że miałem viewstatemode="Disabled" na kontenerze mojej radiobutton listy. Ustawiłem więc viewstatemode="Enabled" na liście radiobuttonów i teraz działa zgodnie z oczekiwaniami.

+0

Dziękuję za tę odpowiedź. Dałem mu szansę, ale niestety ustawienie parametru viewstatemode = "Enabled" na liście radiobutton nie zmieniło zachowania ani nie rozwiązało mojego problemu. – cjo30080

+0

Po prostu włączenie stanu wyświetlania nie jest wystarczające. Czy dołączasz obsługę kliknięcia po stronie klienta, aby wywołać __doPostBack? –

0

Mam ten problem, więc rozwiązany w ten sposób, musisz ustawić funkcje obsługi zdarzenia AutoPostBack i SelectedIndexChange w kodzie C# (strona ładowania) oraz w znaczniku HTML. dla np

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

aw HTML:

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

tylko ustawienie autopostback tot rue działało dla mnie ... –

0

zbudowałem listę przycisk radiowy w kodzie tyłu, a skończył SelectedIndex = 0, wtedy w onload Zadzwoniłem click() pierwszego elementu przy użyciu JavaScript. To jest najprostsza rzecz, która zadziałała dla mnie.

0

Wiem, że to stare pytanie, ale jak powiedział Jeff Shepler, nie ma obsługi kliknięcia dla opcji domyślnej, a częściowa informacja zwrotna nie tworzy takiej.

Zaokrąglałem to, owijając pierwszą radiobuttonlistę w nowy panel aktualizacji z UpdateModel = "Always" (który jest domyślny), więc jest aktualizowany przez jakiekolwiek ogłoszenie zwrotne.

Nie mogłem użyć rozwiązania umieszczania obu radiobuttonli w tym samym panelu aktualizacji z powodu konkretnego układu formularza.

Powiązane problemy