2010-04-22 85 views
0

开发人员使用VB.NET在ASP.NET中创建了一个自定义控件。自定义控件使用中继器。在某些情况下,rpt_ItemDataBound事件遇到数据错误。我的目标是让用户看到死亡的黄色屏幕,而不是让用户更准确地解释数据错误是什么。我想我可以使用如下所示的Try/Catch块来抛出异常,但是,看起来该事件无处被抛出并停止在“End Try”行执行。事件导致错误,但我无法捕捉到异常

Protected Sub rpt_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rpt1.ItemDataBound, rpt2.ItemDataBound 

    Try 

     ProcessBadData... 

    Catch ex As Exception 
     Throw ex 
    End Try 

End Sub 

在VB.NET中,我可以找到设置中继器的DataSource的位置,但是我找不到DataBind事件。

任何想法如何捕捉在这个ASCX控制异常,所以我可以报告给用户?

编辑:

堆栈跟踪看起来是这样的。中继器中有另一个实际上导致错误(rptOther)的中继器,我能够捕获错误,但我只能将它放到rpt_ItemDataBound中。我无法弄清楚如何在没有DataBind事件的情况下调用rpt_ItemDataBound。

at Company.WebForms.Control.rptOther_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
at System.Web.UI.WebControls.Repeater.OnItemDataBound(RepeaterItemEventArgs e)  
at System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem)  
at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource)  
at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e)  
at System.Web.UI.WebControls.Repeater.DataBind()  
at Company.WebForms.Control.rpt_ItemDataBound(Object sender, RepeaterItemEventArgs e) 

回答

1

您是否尝试过注册全局异常处理程序?如果您可以捕捉到异常,您可以使用堆栈跟踪来查明您可能会尝试正确捕捉它的位置。

+0

有没有想过看看例外的StackTrace。感谢这个想法。 – proudgeekdad 2010-04-22 21:42:18