2009-02-18 19 views
2

J'ai trois boutons radio sur un formulaire - A, B, C. Chacune de ces sélections remplit une liste déroulante avec des données spécifiques à l'option. Lorsque le formulaire se charge, j'ai défini l'option A à vérifier (par défaut).Le bouton radio par défaut ne déclenche pas de postback UpdateControl

Lorsque je sélectionne les boutons B ou C, l'AsyncPostBack se déclenche correctement et la liste déroulante est remplie. MAIS, sélectionner ensuite A à partir de B ou C ne déclenche pas l'événement.

Je soupçonne que parce que A a été vérifié lorsque le formulaire chargé, le navigateur ne voit aucun "changement" pour élever l'événement.

Alors qu'est-ce qui peut être fait pour activer le bouton par défaut A reconnaître qu'il est en train d'être changé de B ou C afin de déclencher la publication?

J'ai essayé à la fois de définir l'état vérifié du bouton A dans le code de chargement initial de la page (ie IsPostBack est False) et de définir l'attribut vérifié du radiobutton dans le html, avec les mêmes résultats. Si je ne par défaut pas le bouton radio la fonctionnalité fonctionne comme prévu, sauf que je n'ai pas le bouton radio et liste déroulante par défaut lorsque la page se charge d'abord.


Le html ...

<asp:RadioButton ID="radBook" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="Book" /> 
<asp:RadioButton ID="radCD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="CD" /> 
<asp:RadioButton ID="radDVD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="DVD" /> 

<asp:UpdatePanel ID="pnlTasks" runat="server" UpdateMode="Conditional" RenderMode="Inline"> 
<ContentTemplate> 
    <asp:DropDownList ID="dropShippingSize" runat="server" CssClass="dropdownMandatory"></asp:DropDownList> 
</ContentTemplate> 
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="radBook" /> 
    <asp:AsyncPostBackTrigger ControlID="radCD" /> 
    <asp:AsyncPostBackTrigger ControlID="radDVD" /> 
</Triggers> 
</asp:UpdatePanel> 

Le code derrière ...

Sub Page_Load 
    If Not Me.IsPostBack Then 
     radBook.Checked = True 
    End If 
End Sub 

Private Sub rad_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) _ 
    Handles radBook.CheckedChanged, radCD.CheckedChanged, radDVD.CheckedChanged 

     zLoadShippingSizeDropdown() 

End Sub 
+0

Les boutons radio font-ils partie d'un groupe? – BenB

+0

Oui, ils ont tous le même nom de groupe. – Bill

+0

pouvez-vous poster votre code Page_Load? – BenB

Répondre

0

Etes-vous par hasard en train de gérer viewstate dans votre code? Si c'est le cas, vous devez gérer la version AJAX car viewstate peut souvent être perdu sur les pages de style AJAX. Essayez de placer vos boutons dans le panneau de mise à jour et voyez si vous obtenez le même comportement si le mode de mise à jour du panneau est défini sur conditionnel. Ne vous inquiétez pas des déclencheurs de publication si vous le faites.

Les déclencheurs asynchrones ne concernent que les éléments d'un panneau de mise à jour. Tout élément à l'extérieur d'un panneau fera une publication complète dès la conception.

<asp:UpdatePanel ID="pnlTasks" runat="server" UpdateMode="Conditional" RenderMode="Inline"> 
<ContentTemplate> 
<asp:RadioButton ID="radBook" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="Book" /> 
<asp:RadioButton ID="radCD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="CD" /><asp:RadioButton ID="radDVD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="DVD" /> 
    <asp:DropDownList ID="dropShippingSize" runat="server" CssClass="dropdownMandatory"> 
</asp:DropDownList> 
</ContentTemplate> 
</asp:UpdatePanel> 
+0

Déplacer le UpdatePanel pour inclure les boutons ainsi que la liste déroulante triée ceci. À l'origine, j'avais les boutons et les listes déroulantes dans différentes cellules d'une table, et je configurais simplement le UpdatePanel pour envelopper la cellule déroulante. J'ai pensé que je pourrais déplacer toute la table dans le UpdatePanel. Merci. – Bill

1

Je devine que vous devez avoir besoin de vérifier si la page est publication dans votre événement de chargement:

protected void Form_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostback) 
    { 
     // Set radiobutton A... 
    } 
} 
1

Nous avons eu le même problème et il semble que vous devrez régler l'autre propriété « cochée » pour les boutons radio à « faux ». Alors s'il vous plaît ajoutez les lignes

radCD.Checked = False 
radDVD.Checked = False 
5

J'ai eu le même problème et cherché une réponse pendant des heures. Cela semble n'avoir rien à voir avec ViewState ou quoi que ce soit de similaire, mais avec une sorte d'incompatibilité d'utiliser un RadioButton pré-coché comme déclencheur pour un Async PostBack. Le travail que j'ai trouvé est incroyablement facile et a fonctionné tout de suite; au lieu d'utiliser la checked=true sur la majoration ou myRadioButton.Checked sur le côté serveur, je l'ai fait ce qui suit:

Ne pas fixer l'attribut sur Mark-up et l'ajouter sur l'événement Page_Load:

if (!IsPostBack) 
{ 
    MyRadioButton.InputAttributes["checked"] = "true"; 
    ... 
} 

I j'espère que ceci aide et sauve des personnes des heures de cheveux tirant :)

+0

Merci. Je suis content d'avoir trouvé ça avant que ça n'arrive à la scène des cheveux. –

+0

Merci beaucoup - cela a fait l'affaire et m'a sauvé de plus d'heures de recherche. – Brett

+0

Cela fonctionne pour moi. Thks :). –

0

WOW, je n'aurais jamais pensé que ce pourrait être le bogue. Sauvé de nombreuses heures de frustration.

Merci Juan passer le problème carppy Microsoft et trouvé une solution pour le reste.

Questions connexes