Javascript ASP.NET注册表客户端ScriptBlock、RegsiterStartupScript问题

Javascript ASP.NET注册表客户端ScriptBlock、RegsiterStartupScript问题,javascript,asp.net,Javascript,Asp.net,我正在使用母版页开发一组ASP.NET应用程序。 当我尝试注册一个clientscript时,例如在页面加载中的一个警告框,它可以正常工作。但是,如果我尝试从同一类的任何方法或事件处理程序中执行相同的操作,则不会。 另外,您使用哪种注册方法似乎并不重要,这两种方法都只在页面加载中起作用(对我来说) 到目前为止,我找不到其他方法来提醒用户代码中的异常等(除了构建用户控件),我认为在类似的情况下,其他JavaScript代码也不会执行……例如刷新iframe内容的代码 我想知道是否有一种最佳实践可以

我正在使用母版页开发一组ASP.NET应用程序。 当我尝试注册一个clientscript时,例如在页面加载中的一个警告框,它可以正常工作。但是,如果我尝试从同一类的任何方法或事件处理程序中执行相同的操作,则不会。 另外,您使用哪种注册方法似乎并不重要,这两种方法都只在页面加载中起作用(对我来说)

到目前为止,我找不到其他方法来提醒用户代码中的异常等(除了构建用户控件),我认为在类似的情况下,其他JavaScript代码也不会执行……例如刷新iframe内容的代码

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

我的意思是:

  • 可以从codebehind中的任何位置调用
  • 更新面板和母版页不会使它变得不可靠

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

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
首先,您需要在母版页中声明一个
ScriptManager

在母版页的代码中,我声明了如下错误处理函数:

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
我通常为
ShowError
方法创建一个包含所有可能“覆盖”的接口。例如,您可能希望以不同的方式处理参数,例如自定义的
异常
,或者可能只是不同类型的消息(信息、警告、错误)

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

#region Globals
    IMaster _master;
好的,下一步是在页面/用户控制文件中声明此母版页。我通常在页面加载事件中这样做:

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
在本例中,
IMaster
是我以前创建的界面

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

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
这样,您就有了一种标准化且干净的方法来处理应用程序中的错误


希望这有帮助:)

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

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
首先,您需要在母版页中声明一个
ScriptManager

在母版页的代码中,我声明了如下错误处理函数:

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
我通常为
ShowError
方法创建一个包含所有可能“覆盖”的接口。例如,您可能希望以不同的方式处理参数,例如自定义的
异常
,或者可能只是不同类型的消息(信息、警告、错误)

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

#region Globals
    IMaster _master;
好的,下一步是在页面/用户控制文件中声明此母版页。我通常在页面加载事件中这样做:

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
在本例中,
IMaster
是我以前创建的界面

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

public void ShowError(string message){
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
protected void Page_Load(object sender, EventArgs e){
    _master = Page.Master as IMaster;
}
public void MyMethod(){
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        _master.ShowError(ex);
    }
}
这样,您就有了一种标准化且干净的方法来处理应用程序中的错误


希望这有帮助:)

当您调用这两个方法时,它们来自哪个类?页面、客户端脚本还是脚本管理器?这些页面是否涉及AJAX?是的,UpdatePanel、MasterPage都涉及AJAX,并且提到的EventHandler是Page类的一部分……我认为您的问题有两个方面。1.您试图在异步回发期间调用Javascript;但是该页面版本的RegisterClientScriptBlock方法仅适用于同步回发。2.看起来您正在寻找一个位置来捕获所有服务器端错误(类似于Facebook处理错误的方式)。您可以尝试重写页面的OnError方法。请参阅:当您调用这两个方法时,它们来自哪个类?页面、客户端脚本还是脚本管理器?这些页面是否涉及AJAX?是的,UpdatePanel、MasterPage都涉及AJAX,并且提到的EventHandler是Page类的一部分……我认为您的问题有两个方面。1.您试图在异步回发期间调用Javascript;但是该页面版本的RegisterClientScriptBlock方法仅适用于同步回发。2.看起来您正在寻找一个位置来捕获所有服务器端错误(类似于Facebook处理错误的方式)。您可以尝试重写页面的OnError方法。见: