如何在asp.net上的UserControl PostBack上执行JavaScript?

时间:2012-08-20 13:22:55

标签: javascript asp.net

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

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

我们尝试过的事情:

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

但在所有情况下,脚本仅在加载/重新加载页面时执行。 唯一可行的 hack 是调用pageLoad()函数内的函数,因为在每次PostBack后调用此函数。

2 个答案:

答案 0 :(得分:0)

我建议你在updatePanel中包含用户控件,并在updatePanel load事件中添加你的ScriptManager.RegisterStartUpScript:

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

C#

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

答案 1 :(得分:0)

您可以尝试服务器端: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