从asp.net c页面调用客户端javascript
本文关键字:调用 客户端 javascript asp net | 更新日期: 2023-09-27 18:27:56
我有一个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)。