我有一个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函数。谢谢你的帮助:)
答案 0 :(得分:3)
如果导致回发的控件位于UpdatePanel内,则需要使用
答案 1 :(得分:1)
您无法从Web服务器“执行”客户端脚本(客户端知道服务器是谁,但不是相反)。
克服这种限制的唯一方法是通过a。创建一个长轮询进程,从服务器请求一些东西,服务器没有完成请求,直到有东西返回(然后客户端它再发出请求)。
您真正需要的是支持websocket(双工)通信。你可以查看alchemy websockets或SignalR(有一个非常好的库,动态代理生成)。
“脚本始终在Page_Load上工作”的原因是因为它有效地将脚本标记注入为所请求页面返回的html中。
答案 2 :(得分:1)
您的“更新”按钮可能使用标准ASP按钮行为,这意味着它在呈现时为type="submit"
。既然如此,你可以使用:
Page.ClientScript.RegisterOnSubmitStatement
请记住,它将为每个回发注册一个脚本,而不仅仅是Update按钮。因此,如果您只想在点击更新时运行一些javascript,则需要检查EventTarget是否为UpdateButton.ClientID
。此外,RegisterOnSubmitStatement
始终会添加<script>
标记,因此请勿在javascript语句中包含这些标记。
一个更简单的解决方案,ASP Button本身也具有OnClientClick
属性。当在浏览器中单击按钮时,这将运行客户端代码(javascript)。