ASP.NET RegisterClientScriptBlock,RegsiterStartupScript问题

时间:2010-08-20 13:43:17

标签: javascript asp.net

我正在使用母版页处理一组ASP.NET应用程序。 当我尝试注册一个客户脚本 - 例如一个警告框时,在Page_Load中它可以正常工作。但是,如果我尝试从同一个类的任何方法或事件处理程序执行相同操作,则不会。 此外,您使用哪种Register方法似乎无关紧要,两者都只适用于Page_Load(对我来说)。

到目前为止,我找不到另一种方法来提醒用户有关异常等代码(除了构建用户控件之外),我认为在类似的情况下其他JavaScript代码也不会执行... for示例一个将刷新iframe内容。

我想知道是否有最佳实践可以在JavaScript和代码之间实现更多的动态交互?

我的意思是:

  • 可以从代码隐藏中的任何地方调用
  • UpdatePanels和MasterPages不会使其不可靠

1 个答案:

答案 0 :(得分:1)

好吧,这可能不是一个通用的标准,但我发现很容易处理这样的错误:

首先,您需要在母版页中声明ScriptManager

在母版页的代码背后,我声明了我的错误处理函数:

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}

我通常会为ShowError方法创建一个包含所有可能“覆盖”的接口。例如,您可能希望以不同的方式处理参数,例如自定义Exception或者可能只是不同类型的消息(信息,警告,错误)

然后,您可以通过在页面/用户控件中将其声明为全局变量来使用此界面:

#region Globals
    IMaster _master;

好的,下一步是在我们的页面/用户控制文件中声明这个母版页。我通常在页面加载事件中这样做:

protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}

在这种情况下,IMaster是我之前创建的界面。

现在,您可以使用您在母版页中定义的方法,如下所示:

public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}

通过这种方式,您可以采用标准化且简洁的方式来处理应用程序中的错误。

希望这会有所帮助:)