请问在用户控件中抛出的异常要如何处理

我在用户控件中的Page_Load事件中抛出一个异常
protected void Page_Load(object sender, EventArgs e)
{
……
if (IsPostBack)
{
Control c = null;
if (Request.Form["__EVENTTARGET"].Length != 0)
{
c = Page.FindControl(Request.Form["__EVENTTARGET"]);
}
else
{
foreach (string v in Request.Form)
{
c = Page.FindControl(v);
if (c != null)
{
break;
}
}
}

if (c != null)
{
bool CauseValidation = false;
if (c is Button)
{
CauseValidation = ((Button)c).CausesValidation;
}
else if (c is LinkButton)
{
CauseValidation = ((LinkButton)c).CausesValidation;
}

if (CauseValidation)
{
if (Text.Length == 0)
{
throw new CustomException("请选择栏位(" + new SDTextBox().GetTagName(TagName) + ")");
}
}
}
}
……
}

调用该用户控件的页面使用了母板页,而母板面的使用了updatepanel,我在母板页做了如下定义:
<asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="ScriptManager1_OnAsyncPostBackError"
AsyncPostBackTimeout="9999999" />

然后ScriptManager1_OnAsyncPostBackError的定义如下:
/// <summary>
/// 异步回发错误处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ScriptManager1_OnAsyncPostBackError(object sender, System.Web.UI.AsyncPostBackErrorEventArgs e)
{
#if DEBUG
this.ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + e.Exception.StackTrace;
#else
this.ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message;
#endif
string errMessage = e.Exception.Message;
errMessage = errMessage.Replace("\r\n", "-");
errMessage = errMessage.Replace("\\", "/");
ScriptManager.RegisterStartupScript(Page, Page.GetType(), new Random().Next().ToString(), "setTimeout('CustomAlert(\"" + errMessage + "\");',0);", true);

return;
}


现在碰到问题是,在用户控件抛出异常后,直接就在页面弹出错误提示了,我要点击确定后,程序才会跑到ScriptManager1_OnAsyncPostBackError事件中来,请问这是为什么呢?我这样处理是不是存在问题?
(我在原意是想在ScriptManager1_OnAsyncPostBackError中做统一的错误提示,因为我的整个页面都是包含量在一个updatepanl中的。)
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
缪军 2011-12-06
  • 打赏
  • 举报
回复
我猜想:微软的客户端js提前拦截并处理了异常,
要想解决这个问题,楼主可以尝试使用最新版本的AjaxControlToolkit.dll
在webconfig的controls中增加:
<add namespace="AjaxControlToolkit" assembly="AjaxControlToolkit" tagPrefix="ajaxToolkit"/>
在页面中替换默认的ScriptManaer:
<ajaxToolkit:ToolkitScriptManager ID="Tsm1" runat="server"></ajaxToolkit:ToolkitScriptManager>
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chaichangaini 的回复:]
Global.asax
里面
Application_error好像可以
[/Quote]

这个是走,但也是会弹出错误: Sys.WebForms.PageRequestManagerServerErrorException: 请选择栏位(客户名称)提示,

我觉的奇怪的是为什么我在回发事件中已经有使用
try
{}
catch(){}
了,但就是捕捉不到用户控件抛出来的异常。
1800包吃包住 2011-12-06
  • 打赏
  • 举报
回复
Global.asax
里面
Application_error好像可以
  • 打赏
  • 举报
回复
现在是直接在页面弹出错误提示:行: 4723
错误: Sys.WebForms.PageRequestManagerServerErrorException: 请选择栏位(客户名称)

根本不走我的错误处理方法。
  • 打赏
  • 举报
回复
请问我要如何才能在调用页中捕捉到用户控件中的异常呢?请大家帮忙解决。
  • 打赏
  • 举报
回复
自已顶一下。
nightqj 2011-12-03
  • 打赏
  • 举报
回复
看错误提示好像是 重复定义了 母版里有 updatepanel包涵内容页 则内容页不需再定义
  • 打赏
  • 举报
回复
CustomException是我自定义的一个异常类。

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧