我正在使用母版页开发一组 ASP.NET 应用程序。 当我尝试注册客户端脚本(例如警报框)时,在 Page_Load 中它工作正常。但是,如果我尝试从同一类的任何方法或事件处理程序中执行相同的操作,则不会。 另外,您使用哪种 Register 方法似乎并不重要,两者都只在 Page_Load 中工作(对我来说)。
到目前为止,我找不到另一种方法来提醒用户代码中的异常等(除了构建用户控件),并且我认为在类似的情况下,其他 JavaScript 代码也不会执行...刷新 iframe 内容的示例。
我想知道是否有最佳实践来实现 JavaScript 和后台代码之间更动态的交互?
我的意思是:
- 可以从代码隐藏中的任何位置调用
- UpdatePanels 和 MasterPages 不会使其变得不可靠
最佳答案
好吧,这可能不是一个通用标准,但我发现处理这样的错误非常容易:
首先,您需要在母版页中声明一个 ScriptManager
。
在母版页的代码后面,我声明了我的错误处理函数,如下所示:
public void ShowError(string message){
ScriptManager.RegisterStartupScript(Page, typeof(Page), "showError", String.Format("ShowError({0});", message), true);
}
我通常会为 ShowError
方法创建一个包含所有可能“覆盖”的接口(interface)。例如,您可能希望以不同的方式处理参数,例如自定义Exception
,或者可能只是不同类型的消息(信息、警告、错误)
然后,您可以通过在页面/用户控件中将其声明为全局变量来使用此接口(interface):
#region Globals
IMaster _master;
好的,下一步是在我们的页面/用户控制文件中声明这个母版页。我通常在页面加载事件中这样做:
protected void Page_Load(object sender, EventArgs e){
_master = Page.Master as IMaster;
}
在本例中,IMaster
是我之前创建的接口(interface)。
就这样,现在您可以使用在母版页中定义的方法,如下所示:
public void MyMethod(){
try
{
//do something
}
catch (Exception ex)
{
_master.ShowError(ex);
}
}
这样您就可以采用标准化且干净的方式来处理应用程序中的错误。
希望这有帮助:)
关于javascript - ASP.NET RegisterClientScriptBlock、RegisterStartupScript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531387/