C#OnclientClick不会渲染asp标签?

时间:2009-04-01 09:27:35

标签: c# onclientclick

我有一个ASP按钮,如下所示:

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

问题是de hideOverlay部分中的asp标签。我没有让它工作。为什么不工作?我该如何解决?

4 个答案:

答案 0 :(得分:3)

尝试以下示例

第一个例子

在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>

在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));

    }
}

它将为按钮生成以下来源

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

第二个例子

在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>

在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(); 
    }
}

它将为按钮生成以下来源

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

第三个例子

在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>

它将生成脚本部分的后续源

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

        //Do your stuff
    }
</script> 

答案 1 :(得分:0)

尝试在内联代码中将“=”替换为“#”。例如&lt;%= pnlOverlay.ClientID%&gt; =&gt; &lt;%#pnlOverlay.ClientID%&gt; ,以便在编译时实例化 ClientId

OnClientClick仅用于调用客户端脚本,例如javascript代码。如果您尝试在后面的代码中调用方法,则应使用 OnClick 事件。

答案 2 :(得分:0)

将您的代码更改为:

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

甚至更好

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

并且不要忘记数据绑定链接,是onclientclick没有",因为这些在<%# %>标记内使用

答案 3 :(得分:0)

你可以试试这个。

我。在

背后的代码中
btnReset.OnClientClick = "hideOverlay'"+pnlOverlay.ClientID+"','"+pnlAddComment.ClientID+"')";

II。第二种方法是使用内联javascript。

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

<script type="text/javascript">

function newhideOverlay() 

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

} 

</script>

同时确保在按钮之前加载pnlOverlay和pnlAddComment。