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