2010-04-22 3 views
0

Разработчик создал пользовательский элемент управления в ASP.NET с помощью VB.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, чтобы я мог сообщить об этом пользователю?

Edit:

Трассировка стека выглядит следующим образом. В репитере есть еще один повторитель, который фактически вызывает ошибку (rptOther), и я могу уловить ошибку, но я могу только передать ее в rpt_ItemDataBound. Я не могу понять, как вызов rpt_ItemDataBound вызывается без события DataBind.

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

Смежные вопросы