2010-08-27 17 views
2

Possible en double:
Link Button on the page and set it as default button, work fine in IE but not in Moziladéfini linkbutton comme bouton par défaut pour asp: panneau en asp.net

Comment définir linkbutton comme bouton par défaut pour asp: panneau en asp.net? Je sais qu'un bouton peut être défini par défaut, mais mon application utilise des linkbuttons pour tous les formulaires. Toute suggestion comment cela peut être fait.

EDIT:

Maintenant, j'essayé, Il fonctionne dans Firefox, mais aussi ma validation javascript (ie) click onclient de mon linkbutton ne fonctionne pas pourquoi?

var __defaultFired = false; 

     function WebForm_FireDefaultButton(event, target) { 
      var element = event.target || event.srcElement; 

      if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) { 
       var defaultButton; 

       if (__nonMSDOMBrowser) 
        defaultButton = document.getElementById(target); 
       else 
        defaultButton = document.all[target]; 

       if (defaultButton) { 
        if (typeof (defaultButton.click) != "undefined") 
         defaultButton.click(); 
        else 
         eval(unescape(defaultButton.href.replace("javascript:", ""))); 

        event.cancelBubble = true; 

        if (event.stopPropagation) event.stopPropagation(); 
        return false; 
       } 
      } 
      return true; 
     } 

Deuxième EDIT:

j'ai pu faire mon habitude linkbutton travail de contrôle, mais ne pouvait pas en mesure d'accrocher OnClientClick à lui. Source using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net.

et je l'ai fait,

<%@ Register Namespace="App_Code" TagPrefix="ac" %> 
<asp:Label runat="server" ID="lblHello" /> 
<asp:Panel runat="server" DefaultButton="lbHello"> 
    First name: <asp:TextBox runat="server" ID="txtFirstName" /> 
    <ac:LinkButtonDefault ID="lbHello" runat="server" Text="Click me" 
     OnClientClick="javascript:alert('hai');" OnClick="lbHello_Click" /> 
</asp:Panel> 

Ma fonction ClientSide ne fonctionne pas pourquoi? Toute suggestion.

Répondre

7

Plutôt que d'utiliser un contrôle personnalisé, vous pouvez prendre l'approche simple d'ajouter un attribut à gérer l'événement onKeyPress de la zone de texte. Cela gère correctement en appuyant sur Entrez dans la zone de texte et de déclencher l'événement LinkButton. L'inconvénient de cette approche est qu'aucun événement LinkButtonOnClientClick ne sera déclenché dans Firefox, ce qui est lié au problème décrit dans le blog auquel vous vous êtes connecté. Il ne sera déclenché que lorsque l'utilisateur clique sur le lien avec sa souris. Cependant, dans IE, il déclenchera à partir de la zone de texte et d'être cliqué directement sur.

Solution # 1- Le code pour ajouter l'attribut est la suivante:

protected void Page_Load(object sender, EventArgs e) 
{ 
    txtFirstName.Attributes.Add("onKeyPress", 
     "javascript:if (event.keyCode == 13) __doPostBack('" + lbHello.ClientID + "','')"); 
} 

Essayez cela et voir si elle répond à vos besoins. Gardez juste à l'esprit la limitation que j'ai décrite plus tôt.

Maintenant, si vous voulez que la limitation ci-dessus disparaisse, one of the comments de ce blog a montré une approche qui semble fonctionner correctement. Je l'ai modifié pour se débarrasser du StringBuilder et l'ai converti en C#.

Solution # 2 - Le code pour ajouter la fonction et l'enregistrer est la suivante:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    string addClickFunctionScript = @"function addClickFunction(id) { 
      var b = document.getElementById(id); 
      if (b && typeof(b.click) == 'undefined') 
      b.click = function() { 
       var result = true; 
       if (b.onclick) result = b.onclick(); 
       if (typeof(result) == 'undefined' || result) 
       eval(b.getAttribute('href')); 
      } 
     };"; 

    string clickScript = String.Format("addClickFunction('{0}');", lbHello.ClientID); 

    Page.ClientScript.RegisterStartupScript(this.GetType(), "addClickFunctionScript", addClickFunctionScript, true); 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "click_" + lbHello.ClientID, clickScript, true); 
} 

page Markup - La marge de page est le même pour les deux solutions mentionnées ci-dessus :

<asp:Label runat="server" ID="lblHello" /> 
<asp:Panel ID="Panel1" runat="server" DefaultButton="lbHello"> 
    First name: 
    <asp:TextBox runat="server" ID="txtFirstName" /> 
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click"     
     OnClientClick="javascript:alert('Hello, World!');"/> 
</asp:Panel> 

Dans les deux cas, un contrôle personnalisé n'est pas nécessaire pour obtenir ce type de fonctionnalité. Rester simple.

+0

cela a fonctionné parfaitement .. –

+0

je l'ai décerné à vous .. Un doute de plus est de savoir comment rendre cette réutilisable à toutes mes pages aspx qui a différents boutons de liaison ... –

+0

toute suggestion ... –

1

Jetez un oeil à ce

<asp:Panel runat="server" DefaultButton="lbHello"> 
    First name: <asp:TextBox runat="server" ID="txtFirstName" /> 
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click" /> 
</asp:Panel> 

Le reste de la réponse se trouve ici. Il montre comment résoudre le problème qui se pose avec FireFox
http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net/

+0

j'ai essayé la même chose mais ça ne fonctionne pas dans firefox –

+0

regardez mon edit .. –

+0

toute suggestion pour le faire fonctionner dans firefox –

1

Une autre approche pourrait être de simuler l'événement onclick comme ceci. L'inconvénient est que vous devez utiliser ceci pour tous les endroits où vous devez créer des boutons par défaut.