从asp.net c页面调用客户端javascript

call clientside javascript from asp.net c# page

本文关键字:调用 客户端 javascript asp net      更新时间:2023-09-26

我有一个c#asp.net页面和一个更新数据库的更新函数。在这个函数中,我想调用一些客户端javascript。我读了很多关于在page_load()中注册启动脚本的文章,但这总是在页面加载时触发的(很有趣!)

如何注册然后在更新函数中调用脚本?当用户单击"更新"按钮时触发。我已经尝试了以下(在我的功能内)

protected void doUpdate(object sender, EventArgs e) {
    string jScript;
    jScript = "<script type=text/javascript>alert('hello');<" + "/script>";
    ClientScript.RegisterStartupScript(GetType(), "Javascript", jScript);
}

但它没有被解雇。有什么想法吗?非常感谢。

[更新]

它现在工作了-功能看起来像这个

protected void doUpdate(object sender, EventArgs e) {
    ScriptManager.RegisterStartupScript(this, GetType(),"Javascript", "cleanup();",true);
}

Cleanup()是我的HTML中的javascript函数。感谢大家的帮助:)

如果导致回发的控件在UpdatePanel内,则需要使用

ScriptManager.RegisterStartupScript

您不能从web服务器"执行"客户端脚本(客户端知道服务器是谁,但不知道相反)。

克服这个限制的唯一方法是a.创建一个长的轮询过程,从服务器请求一些东西,服务器直到有东西要返回才完成请求(然后在客户端发出另一个请求)。

您真正想要的是支持websocket(双工)的通信。您可以查看alchemy websockets或SignalR(有一个非常好的动态代理生成库)。

"脚本总是在Page_Load上工作"的原因是它有效地将脚本标记注入为请求的页面返回的html中。

您的"更新"按钮可能使用标准的ASP按钮行为,这意味着在渲染时它是type="submit"。既然是这样,你就可以使用:

Page.ClientScript.RegisterOnSubmitStatement

请记住,这将为每次回发注册一个脚本,而不仅仅是"更新"按钮。因此,如果您只想在单击Update时运行一些javascript,则需要检查EventTarget是否为UpdateButton.ClientID。另外,RegisterOnSubmitStatement总是添加<script>标记,所以不要在javascript语句中包含这些标记。

更简单的解决方案是,ASP按钮本身也具有OnClientClick属性。当在浏览器中单击按钮时,这将运行客户端代码(javascript)。