Здравствуйте, Polevi, Вы писали:
P>Добрый день
P>Есть SharePoint, в нем WebPart, который грузит контрол через LoadControl
P>На контроле лежит грид, связаный с ObjectDataSource
P>Если некорректно прописать UpdateMethod (к примеру указать не все поля) то вместо сообщения типа "ObjectDataSource 'ods1' could not find a non-generic method 'UpdateData' that has parameters... " получаем страничку портала с многозначительным "An unexpected error has occurred. "
P>Вопрос — можно ли както перехватить данное исключение и показать юзеру в удобочитаемом виде ?
Ручками, всё делаем ручками.
Для начала делаем
google://webpart+exception+handling и смотрим наработки по теме.
По-простому можно:
http://www.codeproject.com/KB/sharepoint/Errorhandling_in_Webparts.aspx?display=PrintAll
По-взрослому уже как-то так:
http://andreascode.blogspot.com/2007/12/general-exception-handling-in-web-parts.html
С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1111 ) { /* Работаем */ }
Читал я это все, пробовал — не работает
В случае постбэка среда вызывает IPostBackEventHandler для элементов управления, и этот вызов никак не перехватить
А исключение возникает именно там, в недрах конкретного контрола, например DetailsView
Даже если абстрагироваться от WebPart, рассматривать обычный ascx — перехватить исключение получается только в RaisePostBackEvent страницы или уже в OnError приложения..
ASP стал недавно заниматься и тут такая беда — ошибку не обработать, я в шоке
Здравствуйте, <Аноним>, Вы писали:
А>ASP стал недавно заниматься и тут такая беда — ошибку не обработать, я в шоке
Смоделируй небольшой примерчик, пожалуйста.
С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1111 ) { /* Работаем */ }
//базовый класс
public class WebControlBase : UserControl
{
// перегружаем тут виртуальные методы по вкусу
}
//класс DAO
public static class DAO
{
public static string[] SelectData()
{
return new string[] { "one", "two", "three" };
}
}
//главная страница
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();
Form.Controls.Add(LoadControl("WebUserControl.ascx"));
}
</script>
<html xmlns="
http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
//аscx — наследник WebControlBase
<%@ Control Language="C#" ClassName="WebUserControl" Inherits="WebControlBase" %>
<script runat="server">
</script>
<asp:ObjectDataSource ID="ods1" runat="server" TypeName="DAO" SelectMethod="SelectData"></asp:ObjectDataSource>
<asp:DetailsView ID="dv1" runat="server" DataSourceID="ods1" AutoGenerateDeleteButton="true"></asp:DetailsView>
Если нажать на кнопку Delete — возникнет исключение (DAO слой не содержит нужного метода), которое никак не перехватить в базовом классе WebControlBase
Мысли у меня закончились.. разве что писать своих наследников DetailsView, GridView и тд с нужной реализацией IPostBackEventHandler