【问题标题】:How to execute JavaScript on UserControl PostBack in asp.net?如何在 asp.net 中的 UserControl PostBack 上执行 JavaScript?
【发布时间】:2012-08-21 03:43:21
【问题描述】:

我们有一个由多个用户控件组成的 asp.net 页面,其中许多控件的 visible 属性设置为 false。 通过选择一个单选按钮,通过在代码隐藏中将visible 属性设置为true 来显示用户控件之一。发生这种情况时,我们希望运行一个 JavaScript 函数。该脚本已在页面的Page_Load 方法中使用ScriptManager.RegisterStartUpScript 注册。

我们怎样才能做到这一点?

我们尝试过的事情:

  • 在用户控件中注册脚本(代码隐藏和标记)
  • 尝试ScriptManager 上提供的其他一些方法
  • 使用jQuery $(document).ready()

但在所有情况下,脚本仅在页面加载/重新加载时执行。 唯一似乎有效的hack是调用pageLoad()函数内的函数,因为该函数在每次回发后都会被调用。

【问题讨论】:

  • 首先怀疑 RegisterStartupScript 调用可能在 Page_Load 中的 !Page.IsPostback 块中,这会阻止它运行。你能发布你的代码隐藏吗?
  • RegisterStartupScript 是 Page_Load 中的第一条语句。我现在无法发布整个文件。
  • 我不确定你的代码中还有什么,但一个简单的解决方法是在客户端控制所有单选按钮,然后在客户端也运行 js,这样可以防止不必要的前往服务器端(当然,除非有其他代码需要服务器端代码)
  • 感谢您的建议,但我无法按照我想要的方式完成这项工作。相反,我现在更改了应用程序,因此不需要 UpdatePanels 或 PostBacks。这让事情变得更加可预测。

标签: javascript asp.net


【解决方案1】:

我建议您将用户控件包含在 updatePanel 中,并将您的 ScriptManager.RegisterStartUpScript 添加到 updatePanel 加载事件中:

<asp:UpdatePanel runat="server" ID="UpdatePanel1" 
OnLoad="UpdatePanel1_Load">

c#

protected void UpdatePanel1_Load(object sender, EventArgs e)
{
  //your code to fire the javascript
}

【讨论】:

  • 这不起作用。一旦我的脚本执行过一次,直到我再次注册它才会执行。
【解决方案2】:

您可以尝试服务端:ClientScriptManager.RegisterClientScriptBlock() 与客户端:setTimeout()

例如:

protected void Page_Load(object sender, EventArgs e)
{
    Page page = (Page)HttpContext.Current.CurrentHandler;
    string script = "<script type=\"text/javascript\">setTimeout(function(){alert("Hello World")},3000);</script>";

    if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
    {
            page.ClientScript.RegisterClientScriptBlock(typeof(PageFunctions), "alert", script);
    }
}

这将在 page_load 上注册一个脚本块,并在 3 秒后显示警报,查看有关 setTimeout 的更多信息@Window setTimeout() Method

【讨论】:

  • 如果您了解如何使用 setTimeout(),您可以创建一个在页面加载后运行的 js 方法,并且该方法可以将处理程序应用于单选按钮的选择事件,所有这些都在运行时。
  • 使用 setTimeout() 来等待异步事件是糟糕的编程,因为你实际上不知道它需要多长时间并且你正在你的代码中创建一个竞速条件
猜你喜欢
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2019-10-10
  • 2011-09-18
  • 2014-05-03
  • 2015-01-23
相关资源
最近更新 更多