2009-10-07 7 views
2

J'utilise VB.NET et Webforms avec MS AJAX.Bouton dans UpdatePanel nécessite deux clics

J'ai un bouton dans un panneau de mise à jour MS AJAX. Lorsque la page est chargée, la visibilité du bouton est définie sur 'false' de manière déclarative.

Une fois que l'utilisateur a coché une case (également dans le UpdatePanel), j'ai défini la visiblité du bouton sur true et il devient visible comme prévu.

Cependant, l'utilisateur doit cliquer deux fois sur le bouton pour que quelque chose se produise. Le premier clic met simplement l'accent sur le bouton. Un autre clic est requis pour que la publication se fasse (vérifiée visuellement et avec des points d'inflexion)

Une idée pourquoi ça pourrait être?

Merci beaucoup!

Anthony

+0

Est-ce que le poste de la page retour sur le sapin st click, ou est-ce que cela ne fait que gagner en focus dans le navigateur? –

Répondre

4

Avez-vous un validateur sur la page avec affichage dynamique? Si le validateur est affiché et que vous appuyez sur le bouton de la souris, le validateur peut pousser le bouton sous votre souris, donc lorsque vous levez votre doigt, vous ne déclenchez pas l'événement click.

Si tel est le cas, vous pouvez résoudre ce problème en définissant la propriété display du validateur sur static.

Autres pensées:

Y at-il javascript en cours d'exécution sur le côté client du bouton onclick, onmousedown, onmouseup?

Ajoutez-vous dynamiquement ce bouton à la page?

Définissez-vous la propriété AutoPostBack de CheckBox sur True ou False? Si elle est définie sur true, vous pouvez être au milieu d'une publication asynchrone lorsque vous cliquez sur le bouton.

+0

Ce doit être le javascript du contrôle tiers qui interfère. – Anthony

0

J'ai testé cela dans IE6 et Firefox 3.5 et ça marche très bien pour moi. Votre configuration est différente?

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" Text="Checkbox" /> 
     <asp:Button ID="Button1" runat="server" Text="Button" Visible="False" OnClick="Button1_Click" /> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    Button1.Visible = CheckBox1.Checked; 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = DateTime.Now.ToString(); 
} 
+0

Merci d'avoir essayé. Il doit avoir été le contrôle de téléchargement de fichiers tiers qui diffère des choses. – Anthony

0

Wild guess: vérifiez-vous la valeur de la case à cocher dans l'étape Init ou Load de votre page? En raison du cycle de page, les contrôles de case à cocher n'auront pas encore défini leurs valeurs republiées et apparaîtront non cochés. Seulement dans le deuxième postback, votre code verra l'état vérifié correctement (chargement de viewstate) et le bouton est affiché.

Définissez la visibilité dans les cases à cocher Modifier l'événement ou dans PreRender.

0

Merci de votre participation.

J'ai un 3rd Party File Upload control dans le UpdatePanel avec le bouton et cela semble provoquer un conflit avec le bouton.

J'ai résolu le problème avec javascript.Ajouter la méthode suivante en haut de la page:

<script language="javascript" type="text/javascript"> 
    function DisplayImportButton() { 
     document.getElementById('<%= btnImport.ClientId %>').style.visibility = "visible"; 
    } 
</script> 

-je ajouter ce qui suit au bas de la page de sorte que le bouton est toujours caché au début:

<script language="javascript" type="text/javascript"> 
    var elem; 

    elem = document.getElementById('<%= btnImport.ClientId %>'); 

    if (elem) {   
     elem.style.visibility = "hidden"; 
    } 
</script> 

Dans le gestionnaire de le changement de statut de la case cochée I a ajouté:

ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "ImportButtonScript", _ 
     "DisplayImportButton();", True) 

Sincères salutations

Questions connexes