2009-02-06 4 views
0

Salutations!DropDownList Postback sur ENTRÉE Keypress ne pas déclencher l'événement côté serveur

J'ai un menu de navigation simple composé d'un asp: DropDownList et d'un asp: Button. Les utilisateurs sélectionnent un élément dans la liste déroulante et cliquent sur le bouton pour accéder à la nouvelle URL. Je voudrais être en mesure de prendre en charge lorsque les utilisateurs appuyez sur la touche ENTRÉE lorsqu'un élément de la liste déroulante est sélectionné afin qu'il répète le comportement comme s'ils avaient cliqué sur le bouton.

Voici ce que j'ai jusqu'ici:

<asp:DropDownList ID="ddlMenu" 
        runat="server" 
        onkeypress="if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {__doPostBack('GoButton',''); return false;}" /> 

<asp:Button ID="btnGoButton" runat="server" onclick="GoButton_Click"/> 

code de clic de Le bouton est:

protected void GoButton_Click(object sender, EventArgs e) 
{ 
    string l_url = ddlMenu.SelectedItem.Value; 
    Response.Redirect(l_url); 
} 

Cependant, chaque fois que je frappe sur la touche ENTER, les messages de la page en arrière, mais l'événement client de la touche gestionnaire ne tire pas. Est-ce que je manque quelque chose?

Répondre

4

Avez-vous essayé d'envelopper vos contrôles dans un panneau avec le bouton par défaut? Je sais que cela fonctionne pour les zones de texte

<asp:Panel runat="server" id="searchPanel" DefaultButton="btnGoButton"> 
    <asp:DropDownList ID="ddlMenu" runat="server" /> 
    <asp:Button ID="btnGoButton" runat="server" onclick="GoButton_Click"/> 
</asp:Panel> 
+0

C'est beaucoup plus facile Merci :) – Bullines

+0

Juste eu le même problème, m'a énormément aidé. –

0

Eh bien, vous utilisez le mauvais ID de bouton.

L'ID de la méthode __doPostBack doit être l'UniqueID du contrôle de déclenchement. Vous dites que le déclencheur est 'GoButton', mais il a l'ID 'btnGoButton'.

Le serveur ne peut en aucun cas savoir que votre 'GoButton' est réellement le btnGoButton.

Rappelez-vous également que le nom mangling (une méthode pour assurer des noms uniques pour les contrôles) peut gâcher encore plus l'UniqueID.

Essayez d'écrire comme ceci à la place: __doPostBack ('<% # btnGoButton.UniqueID%>', '');

ou ajouter dans le code-behind ..

ddlMenu.Attributes.Add ("onkeypress", string.Format ("__ doPostBack ('{0}', '');", btnGoButton.UniqueID);

Questions connexes