2012-03-16 68 views
1

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

如何注册然后在我的更新函数中调用脚本?当用户点击“更新”按钮时触发。我试过以下(在我的功能)

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

清理()是我的HTML JavaScript函数。感谢您的帮助:)

+0

引起的UpdatePanel内回发的控制? – 2012-03-16 12:27:46

+0

是的。这是可能的问题吗? – 2012-03-16 12:35:30

+0

添加了答案。是的,这可能是问题:) – 2012-03-16 12:45:18

回答

3

如果导致回发的控制是一个UpdatePanel内需要使用

ScriptManager.RegisterStartupScript

+0

那么会在页面加载? – 2012-03-16 12:53:18

+0

你可以在doUpdate上使用它,这很好 – 2012-03-16 13:07:07

+0

感谢Claudio - 完美的作品! – 2012-03-16 13:29:57

1

您不能从网络服务器'执行'客户端脚本(客户端知道服务器是谁,但不是其他方式)。

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

你真正想要的是websocket(双工)启用通信。你可以查看炼金术websockets或SignalR(有一个很好的动态代理生成库)。

'脚本始终在Page_Load上工作'的原因是因为它有效地将脚本标签注入为请求的页面返回的html。

1

“更新”按钮很可能使用标准的ASP按钮行为,这意味着它在呈现时为type="submit"。既然如此,您可以使用:

Page.ClientScript.RegisterOnSubmitStatement 

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

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

+0

谢谢 - 这似乎是正确的选择。不过,我认为它被称为onSubmit。我正在寻找一种方法,在我的代码完成一些检查后,以编程方式调用该函数。例如,更新是好的 - 然后调用JS ..否则不要。谢谢:) – 2012-03-16 12:42:30

+1

啊,如果你确实需要在回发后运行脚本,那么我认为克劳迪奥的解决方案是你需要去的方式。 – 2012-03-16 12:45:02