【问题标题】:call clientside javascript from asp.net c# page从asp.net c#页面调用客户端javascript
【发布时间】:2012-03-16 12:23:12
【问题描述】:

我有一个 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 内的回发?
  • 是的。这是可能的问题吗?
  • 添加了一个答案。是的,这可能是问题:)

标签: c# javascript asp.net updatepanel


【解决方案1】:

如果导致回发的控件位于您需要使用的 UpdatePanel 中

ScriptManager.RegisterStartupScript

【讨论】:

  • 那会在页面加载中吗?
  • 你可以在doUpdate上使用,没关系
【解决方案2】:

您不能从 Web 服务器“执行”客户端脚本(客户端知道服务器是谁,但反过来不知道)。

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

您真正需要的是启用 websocket(双工)的通信。您可以查看 alchemy websockets 或 SignalR(有一个非常不错的动态代理生成库)。

“脚本始终在 Page_Load 上工作”的原因是因为它有效地将您的脚本标记注入到为请求的页面返回的 html 中。

【讨论】:

    【解决方案3】:

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

    Page.ClientScript.RegisterOnSubmitStatement
    

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

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

    【讨论】:

    • 谢谢 - 这似乎是正确的选择。但是我认为它被称为 onSubmit。我正在寻找一种在我的代码完成一些检查后以编程方式调用该函数的方法。例如,更新没问题 - 然后调用 JS .. 否则不要。谢谢:)
    • 啊,如果您确实需要在回发后运行脚本,那么我认为 Claudio 的解决方案是您需要采用的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多