2009-04-01 11 views
1

Ich habe eine ASP-Taste, die wie folgt lookts:C# OnclientClick rendert Asp-Tags nicht?

<asp:Button 
    ID="btnReset" 
    runat="server" 
    OnClientClick = "hideOverlay('<%=pnlOverlay.ClientID %>', '<%=pnlAddComment.ClientID %>');" 
    CssClass ="btnCancel PopUpButton" 
/> 

Das Problem sind die ASP-Tags in de hideOverlay part.I arbeiten sie nicht bekommen. Warum funktioniert nicht? Und wie repariere ich es?

Antwort

3

Versuchen unten Beispiele

Erstes Beispiel

In aspx

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="btnReset" runat="server" CssClass="btnCancel PopUpButton" /> 
     <asp:Panel ID="pnlOverlay" runat="server"> 
     </asp:Panel> 
     <asp:Panel ID="pnlAddComment" runat="server"> 
     </asp:Panel>   
    </div> 
    </form> 
</body> 
</html> 

In Codebehind

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Default10 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     btnReset.Attributes.Add("onclick", string.Format("hideOverlay('{0}','{1}')", pnlOverlay.ClientID, pnlAddComment.ClientID)); 

    } 
} 

Es wird die unten Quelle für die

Taste erzeugen

Zweites Beispiel

In Aspx

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="btnReset" runat="server" CssClass="btnCancel PopUpButton" OnClientClick=<%# "hideOverlay('" + pnlOverlay.ClientID + "', '" + pnlAddComment.ClientID +"');" %> /> 
     <asp:Panel ID="pnlOverlay" runat="server"> 
     </asp:Panel> 
     <asp:Panel ID="pnlAddComment" runat="server"> 
     </asp:Panel>   
    </div> 
    </form> 
</body> 
</html> 

In Codebehind

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Default10 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     btnReset.DataBind(); 
    } 
} 

Es wird die unten Quelle für die

Schaltfläche erzeugen
<input type="submit" name="btnReset" value="" onclick="hideOverlay('pnlOverlay', 'pnlAddComment');" id="btnReset" class="btnCancel PopUpButton" /> 

Drittes Beispiel

In aspx

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="btnReset" runat="server" CssClass="btnCancel PopUpButton" OnClientClick="hideOverlay();" /> 
     <asp:Panel ID="pnlOverlay" runat="server"> 
     </asp:Panel> 
     <asp:Panel ID="pnlAddComment" runat="server"> 
     </asp:Panel>   
    </div> 
    </form> 
</body> 
<script type="text/javascript" > 
    function hideOverlay() 
    { 
     var pnlOverlayID = '<%= pnlOverlay.ClientID %>'; 
     var pnlAddCommentID = '<%= pnlAddComment.ClientID %>'; 

     //Do your stuff 
    } 
</script> 
</html> 

Es wird die follwing Quelle für den Scriptabschnitt erzeugen

<script type="text/javascript" > 
    function hideOverlay() 
    { 
     var pnlOverlayID = 'pnlOverlay'; 
     var pnlAddCommentID = 'pnlAddComment'; 

     //Do your stuff 
    } 
</script> 
0

Versuchen Sie, "=" durch "#" in Ihrem Inline-Code zu ersetzen. z.B. <% = pnlOverlay.ClientID%> =><% # pnlOverlay.ClientID%>, so dass die ClientId in der Kompilierung instanziiert wird.

OnClientClick wird nur verwendet, um Client-Sidee-Skript wie JavaScript-Code aufzurufen. Wenn Sie versuchen, eine Methode im Code zurückzurufen, sollten Sie das Ereignis OnClick verwenden.

0

Ihren Code ändern:

<asp:Button 
    ID="btnReset" 
    runat="server" 
    OnClientClick=<%# "hideOverlay('" + pnlOverlay.ClientID + "', '" + pnlAddComment.ClientID +"');" %> 
    CssClass ="btnCancel PopUpButton" 
/> 

oder noch schöner, wenn Sie string.Format()

verwenden
OnClientClick=<%# string.Format("hideOverlay('{0}', '{1}');", pnlOverlay.ClientID,pnlAddComment.ClientID) %> 

Und vergessen Sie nicht den Link Databind, und ja die onclientclick nicht " hat, da diese innerhalb der <%# %> Tags verwendet werden

+0

ich Ihren Code versucht haben, aber es funktioniert nicht. Wenn ich an der Quelle suchen ich sehe: Das Onclick-Attribut ist weg , Woher?. Und was meinst du mit dem Datenlink? – Martijn

+0

In Ihrem Codebehind müssen Sie "DataBind();" oder "btnReset.DataBind()" – Gidon

0

Sie können dies versuchen.

i. In dem Code hinter

btnReset.OnClientClick = "hideOverlay'"+pnlOverlay.ClientID+"','"+pnlAddComment.ClientID+"')"; 

ii. Der zweite Ansatz besteht darin, ein Inline-Javascript zu verwenden.

<asp:Button ID="btnReset" runat="server" OnClientClick = "newhideOverlay()" CssClass 
="btnCancel PopUpButton"/> 

<script type="text/javascript"> 

function newhideOverlay() 

{  
     hideOverlay('<%=pnlOverlay.ClientID %>', '<%=pnlAddComment.ClientID %>'); 

} 

</script> 

Stellen Sie außerdem sicher, dass sowohl pnlOverlay als auch pnlAddComment vor der Schaltfläche geladen werden.

Verwandte Themen