ObjectDataSourceStatusEventArgs.ExceptionHandled Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает или задает значение, показывающее, было ли обработано исключение, вызванное бизнес-объектом.
public:
property bool ExceptionHandled { bool get(); void set(bool value); };
public bool ExceptionHandled { get; set; }
member this.ExceptionHandled : bool with get, set
Public Property ExceptionHandled As Boolean
Значение свойства
Значение true
, если исключение, вызванное бизнес-объектом, было обработано и не должно вызываться ObjectDataSource; в противном случае — значение false
.
Примеры
В следующем примере кода показано, как использовать ObjectDataSource элемент управления с бизнес-объектом и элемент управления GridView для удаления данных. Изначально GridView отображает набор всех сотрудников, используя метод, заданный свойством SelectMethod для получения данных из EmployeeLogic
объекта .
AutoGenerateDeleteButton Так как свойство имеет значение true
, элемент GridView управления автоматически отображает кнопку Удалить.
Если нажать кнопку Удалить , действие выполняется с помощью метода, Delete заданного свойством DeleteMethod , и всех параметров, указанных DeleteParameters в коллекции. В этом примере кода также выполняются некоторые шаги предварительной и постобработки. Делегат NorthwindEmployeeDeleting
вызывается для обработки Deleting события перед выполнением Delete действия, а NorthwindEmployeeDeleted
делегат вызывается для обработки Deleted события после Delete завершения действия для обработки любых исключений, которые могли возникнуть. В этом примере, если NorthwindDataException
возникает исключение , он обрабатывается делегатом NorthwindEmployeeDeleted
.
Чтобы изучить реализацию EmployeeLogic
бизнес-объекта среднего уровня, который используется в этом примере кода, ознакомьтесь с обзором класса в ObjectDataSourceStatusEventArgs.
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Import namespace="Samples.AspNet.CS" %>
<%@ 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">
private void NorthwindEmployeeDeleting(object source, ObjectDataSourceMethodEventArgs e)
{
// The GridView passes the ID of the employee
// to be deleted. However, the buisiness object, EmployeeLogic,
// requires a NorthwindEmployee parameter, named "ne". Create
// it now and add it to the parameters collection.
IDictionary paramsFromPage = e.InputParameters;
if (paramsFromPage["EmpID"] != null) {
NorthwindEmployee ne
= new NorthwindEmployee( Int32.Parse(paramsFromPage["EmpID"].ToString()));
// Remove the old EmpID parameter.
paramsFromPage.Clear();
paramsFromPage.Add("ne", ne);
}
}
private void NorthwindEmployeeDeleted(object source, ObjectDataSourceStatusEventArgs e)
{
// Handle the Exception if it is a NorthwindDataException
if (e.Exception != null)
{
// Handle the specific exception type. The ObjectDataSource wraps
// any Exceptions in a TargetInvokationException wrapper, so
// check the InnerException property for expected Exception types.
if (e.Exception.InnerException is NorthwindDataException)
{
Label1.Text = e.Exception.InnerException.Message;
// Because the exception is handled, there is
// no reason to throw it.
e.ExceptionHandled = true;
}
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - C# Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:gridview
id="GridView1"
runat="server"
datasourceid="ObjectDataSource1"
autogeneratedeletebutton="true"
autogeneratecolumns="false"
datakeynames="EmpID">
<columns>
<asp:boundfield headertext="EmpID" datafield="EmpID" />
<asp:boundfield headertext="First Name" datafield="FirstName" />
<asp:boundfield headertext="Last Name" datafield="LastName" />
</columns>
</asp:gridview>
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
selectmethod="GetAllEmployees"
deletemethod="DeleteEmployee"
ondeleting="NorthwindEmployeeDeleting"
ondeleted="NorthwindEmployeeDeleted"
typename="Samples.AspNet.CS.EmployeeLogic">
<deleteparameters>
<asp:parameter name="EmpID" type="Int32" />
</deleteparameters>
</asp:objectdatasource>
<asp:label id="Label1" runat="server" />
</form>
</body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Import namespace="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' Called before a Delete operation.
Private Sub NorthwindEmployeeDeleting(ByVal source As Object, ByVal e As ObjectDataSourceMethodEventArgs)
' The GridView passes the ID of the employee
' to be deleted. However, the business object, EmployeeLogic,
' requires a NorthwindEmployee parameter, named "ne". Create
' it now and add it to the parameters collection.
Dim paramsFromPage As IDictionary = e.InputParameters
If Not paramsFromPage("EmpID") Is Nothing Then
Dim ne As New NorthwindEmployee(paramsFromPage("EmpID").ToString())
' Remove the old EmpID parameter.
paramsFromPage.Clear()
paramsFromPage.Add("ne", ne)
End If
End Sub ' NorthwindEmployeeDeleting
' Called after a Delete operation.
Private Sub NorthwindEmployeeDeleted(ByVal source As Object, ByVal e As ObjectDataSourceStatusEventArgs)
' Handle the Exception if it is a NorthwindDataException.
If Not e.Exception Is Nothing Then
' Handle the specific exception type. The ObjectDataSource wraps
' any Exceptions in a TargetInvokationException wrapper, so
' check the InnerException property for the expected Exception types.
If e.Exception.InnerException.GetType().Equals(GetType(NorthwindDataException)) Then
Label1.Text = e.Exception.InnerException.Message
' Because the exception is handled, there is
' no reason to throw it.
e.ExceptionHandled = True
End If
End If
End Sub ' NorthwindEmployeeDeleted
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ObjectDataSource - VB Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:gridview
id="GridView1"
runat="server"
datasourceid="ObjectDataSource1"
autogeneratedeletebutton="true"
autogeneratecolumns="false"
datakeynames="EmpID">
<columns>
<asp:boundfield headertext="EmpID" datafield="EmpID" />
<asp:boundfield headertext="First Name" datafield="FirstName" />
<asp:boundfield headertext="Last Name" datafield="LastName" />
</columns>
</asp:gridview>
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
selectmethod="GetAllEmployees"
deletemethod="DeleteEmployee"
ondeleting="NorthwindEmployeeDeleting"
ondeleted="NorthwindEmployeeDeleted"
typename="Samples.AspNet.VB.EmployeeLogic">
<deleteparameters>
<asp:parameter name="EmpID" type="Int32" />
</deleteparameters>
</asp:objectdatasource>
<asp:label id="Label1" runat="server" />
</form>
</body>
</html>
Комментарии
Если бизнес-объект создает исключение, свойству ExceptionHandled присваивается значение false
, а исключение упаковывается свойством Exception . При использовании ObjectDataSourceStatusEventHandler объекта можно проверка Exception свойство и обработать исключение. При обработке исключения задайте для свойства значение ExceptionHandledtrue
, иначе ObjectDataSource элемент управления вызовет исключение.