2009-08-11 7 views
0

J'ai un bouton dans un ascx à l'intérieur d'un panneau de mise à jour à l'intérieur de la page de contenu aspx. Lorsque le bouton est cliqué, je veux qu'il exécute une fonction JS qui provoque l'affichage d'un panneau. Voici mon code.Validation d'un événement de clic sur un bouton en utilisant JS depuis l'intérieur d'ascx imbriqué dans le panneau d'affichage

<pre> 


    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ABC.ascx.cs" Inherits="App.ABC" %> 
    <script type= "text/javascript" language="javascript"> 
    var val1=0; 
    var val2=0; 


    function ShowPanel(val2) 
    { 
     if(val2 != 0) 
     { 
      switch(val2) 
      { 
      case 1 : 
       document.getElementById('<%=pnl1.ClientID%>').style.visibility = 'visible'; 
      break;   
      } 
     } 
     return false; 
    } 
    </script> 


    <asp:LinkButton ID="lbl1" runat="server" OnClick="return ShowPanel(1);">count</asp:LinkButton> 

Je ne suis pas en mesure de le faire. S'il vous plaît aider

Mise à jour # 1 - ABC.ascx est UpdatePanel dans la page ASPX XYZ.aspx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ABC.ascx.cs" Inherits="App.ABC" %> 
    <script type= "text/javascript" language="javascript"> 
    var val1=0; 
    var val2=0; 

    function ShowPanel(val2) { 
      if (val2 != 0) { 
       switch (val2) { 
        case 1: 
         document.getElementById("<%= this.pnl1.ClientID%>").style.display = "none"; 
         break; 
       } 
      } 
      return false; 
     } 
    </script> 
    <div> 

    <div style="text-align:center"> 

    </div> 

    <table style="width:100%; text-align:center; border-color:#99CCFF" border="3"> 
     <tr style="text-align:left"> 
     <td><asp:LinkButton ID="lbl1" runat="server" OnClientClick="return ShowPanel(1);">count</asp:LinkButton> 
     </td> 
     <td style="text-align:right"><asp:Button ID="btnHide1" runat="server" Text="hide" 
       Height="18px" Width="32px"/> 
     </td> 
     </tr> 
     <tr> 
     <td colspan="2"><asp:Panel ID="pnl1" runat="server" Visible="false"> </asp:Panel> 
     </td> 
     </tr> 
    </table> 

    </div> 

Répondre

0
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 

<script type= "text/javascript" language="javascript"> 
    var val1 = 0; 
    var val2 = 0; 


    function ShowPanel(val2) { 
     if (val2 != 0) { 
      switch (val2) { 
       case 1: 
        document.getElementById("<%= this.pnl1.ClientID%>").style.display = "none"; 
        break; 
      } 
     } 
     return false; 
    } 
    </script> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Panel runat="server" ID="pnl1"><div>pepe</div></asp:Panel> 
    <asp:LinkButton ID="lbl1" runat="server" OnClientClick="return ShowPanel(1);">count</asp:LinkButton> 
    </div> 
    </form> 
</body> 
</html> 
+0

J'ai essayé cela mais cela m'a envoyé une erreur quand je chargeais dynamiquement le contrôle utilisateur. ABC.ascx (51): erreur CS1041: identificateur attendu; 'retour' est un mot-clé –

+0

là je mets l'exemple complété –

+0

désolé, cette ligne génère une erreur "<% = this.pepe%>" –

0

Dans votre exemple, vous utilisez LinkButton.OnClick, qui est un server- Evénement parallèle, il ne déclenchera pas le JavaScript côté client. Si vous remplacez OnClick par OnClientClick, ASP.NET doit cracher un gestionnaire de clic côté client pour le LinkButton (qui sera probablement rendu en tant qu'attribut onclick = "return ShowPanel (1);" sur le tag d'ancrage.)

En outre, j'ai remarqué que dans votre fonction ShowPanel(), vous utilisez pnl1.ClientID. Je ne peux pas dire à partir de votre extrait de code si ce Panel se trouve dans la page hôte (ASPX) ou le contrôle utilisateur (ASCX) mais s'il n'est pas dans le contrôle utilisateur, vous devrez lui renvoyer une référence (c'est-à-dire DirectCast (Me.Page, MyHostPageWithPanel) .pnl1). Ou vous pourriez décider qu'il n'a pas vraiment besoin d'être un contrôle côté serveur, et ensuite vous pourriez simplement coder en dur un div avec un identifiant qui est facilement saisi par JavaScript.

+0

Jordan, j'ai changé pour onclientclick. Le panneau est dans l'ABC.ascx. ABC.ascx est rendu dynamiquement par updpnl1 qui se trouve dans XYZ.aspx. –

0

a fait cela en utilisant facilement cette

ScriptManager.RegisterOnSubmitStatement (ce, this.GetType(), "", "showwait();");

ScriptManager.RegisterClientScriptBlock (this, this.GetType(), "", "stopwait();", true);

Questions connexes