2012-02-20 84 views
1

我有一个网页(ASP.NET C#),有一个按钮:的JavaScript按钮的onclick不工作

<asp:Button ID="btnHide" runat="server" OnClick="HidePanel" Text="Hide"/> 

,我正在做一个JavaScript警告,如:

public void HidePanel(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(),"Hello","<script type=text/javascript> alert('Hello') </script>"); 
} 

如果我修改函数没有object senderEventArgs e然后我可以从Page_Load调用它,它工作正常,我得到警报。

正如上面所写,我希望看到警报,当我点击按钮,但它没有发生。我相信这是显而易见的,但我没有看到它。

+0

为什么不使用OnClientClick? – 2012-02-20 20:16:33

+0

你的代码工作正常。 – Asdfg 2012-02-20 20:20:30

+0

我使用的是OnClick,因为还有很多事情要发生,比如使用我们使用的第三方预订系统检查连接性和当前会话。 – Deverill 2012-02-20 20:23:30

回答

1

您可以删除代码注册的JavaScript代码,而是这样做:

<asp:Button ID="btnHide" runat="server" 
    OnClick="HidePanel" Text="Hide" OnClientClick="alert('Hello');" 
    UseSubmitBehavior="false" />  

此:

UseSubmitBehavior="false" 

会导致按钮触发客户端脚本,它会运行服务器端代码(回发)。

+0

太棒了,谢谢! – Deverill 2012-02-20 20:34:26

3

使用OnClientClick而不是OnClick。并添加一个return false以避免在页面上回传。

<asp:Button ID="btnHide" runat="server" OnClientClick="alert('Hello'); return false;" Text="Hide"/> 
+0

在服务器端有很多步骤必须发生。如果我这样做,我可以让它在js处理单击事件后运行我的服务器脚本,如果我没有onclick? – Deverill 2012-02-20 20:25:53

+0

只需将OnClick添加回来并在OnClick方法上添加您的服务器端代码即可。但在OnClientClick上留下警报,并删除返回false,以便页面回发并执行您的服务器端代码。这将弹出警报,当你点击确定后,页面将回发,你的服务器端将执行。 – 2012-02-20 20:37:08

2

你可以尝试使用, ClientScript.RegisterClientScriptBlock(的GetType(), “nameOfScript”,scriptString);

我以前曾在点击事件中使用过。

编辑: 我还无法编辑帖子,但您的代码对我来说工作正常。

并根据情况,他可能想要做一些服务器端的东西以及点击事件,或动态地建立脚本。

编辑: 如果您已经注册了一个具有相同名称的脚本,它将不会运行,例如。

Page.ClientScript.RegisterStartupScript(this.GetType(), "Hello", "<script type=text/javascript> var i = 0;</script>"); 
Page.ClientScript.RegisterStartupScript(this.GetType(), "Hello", "<script type=text/javascript> alert('other hello') </script>");