WebPart, обработка ошибок
От: Polevi  
Дата: 19.11.08 07:43
Оценка:
Добрый день
Есть SharePoint, в нем WebPart, который грузит контрол через LoadControl
На контроле лежит грид, связаный с ObjectDataSource
Если некорректно прописать UpdateMethod (к примеру указать не все поля) то вместо сообщения типа "ObjectDataSource 'ods1' could not find a non-generic method 'UpdateData' that has parameters... " получаем страничку портала с многозначительным "An unexpected error has occurred. "
Вопрос — можно ли както перехватить данное исключение и показать юзеру в удобочитаемом виде ?
Re: WebPart, обработка ошибок
От: Polevi  
Дата: 20.11.08 06:16
Оценка:
в Web приложении я могу сделать так

protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
{
try
{
base.RaisePostBackEvent(sourceControl, eventArgument);
}
catch (Exception e)
{
Response.Write(e.Message);
}
}

а как быть с WebPart'ом ?
Re: WebPart, обработка ошибок
От: Andir Россия
Дата: 20.11.08 13:15
Оценка:
Здравствуйте, 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 ) { /* Работаем */ }
Re[2]: WebPart, обработка ошибок
От: Аноним  
Дата: 20.11.08 19:29
Оценка:
Читал я это все, пробовал — не работает
В случае постбэка среда вызывает IPostBackEventHandler для элементов управления, и этот вызов никак не перехватить
А исключение возникает именно там, в недрах конкретного контрола, например DetailsView
Даже если абстрагироваться от WebPart, рассматривать обычный ascx — перехватить исключение получается только в RaisePostBackEvent страницы или уже в OnError приложения..
ASP стал недавно заниматься и тут такая беда — ошибку не обработать, я в шоке
Re[3]: WebPart, обработка ошибок
От: Andir Россия
Дата: 21.11.08 09:27
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>ASP стал недавно заниматься и тут такая беда — ошибку не обработать, я в шоке


Смоделируй небольшой примерчик, пожалуйста.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1111 ) { /* Работаем */ }
Re[4]: WebPart, обработка ошибок
От: Polevi  
Дата: 24.11.08 08:30
Оценка:
//базовый класс
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.