现给用户一个更友好的信息说明试图更新产品时出现了问 题. 如果在执行这项操作时出现了一个异常, ObjectDataSource 和数据 Web 控件的 post 级事件 都提供了发现并不让它出现在 ASP.NET 运行时的方法.在我们的例子里,让我们为 GridView
的 RowUpdated 事件创建一个事件处理程序,它判断是否激发了一个异常,如果是,则在一个 Label 服务器控件中显示异常详细信息. 首先,添加一个 Label 控件到 ASP.NET 页面,设置它的 ID 属性为 ExceptionDetails 并清 空它的 Text 属性.为了吸引用户的实现到此信息,设置其 CssClass 为 Warning,这是我们 在之前的章节里添加到 Styles.css 文件的一个 CSS 类别. 记得这个 CSS 类别让 Label 的 text 显示为红色,斜体,加粗的较大的字体.
图 7: 添加一个 Label 服务器控件到页面
因为我们希望这个 Label 控件仅在异常出现时显示,在 Page_Load 事件处理中设置它的 Visible 属性为 false: 1 protected void Page_Load(object sender, EventArgs e) 2 3 4 } 5 { ExceptionDetails.Visi
ble = false;
通过这些代码,当第一次访问页面和随后的回传后,ExceptionDetails 控件的 Visible 属 性都将被设置为 false. 当在 GridView 的 RowUpdated 事件处理程序中检测到一个 DAL/BLL 层的异常时,我们将设置 ExceptionDetails 控件的 Visible 属性为 true.因为页面生命 周期里 Web 服务器控件的事件处理出现在 Page_Load 事件处理之后,该 Label 将会显示.不 过,下一次回传,Page_Load 事件处理将重新将 Visible 属性设置回 false,再次隐藏它. 注意: 注意 我们也可以不必在 Page_Load 里设置 ExceptionDetails 控件的 Visible 属性,作为另一种选择,可以在声明语法里设置其 Visible 属性为 false 并禁用视图 状态(设置它的 EnableViewState 属性为 false).我们将在以后的章节里使用这 种方法. 通过添加这个 Label 控件,我们下一步是为 GridView 的 RowUpdated 事件添加一个事件处理
程序. 在设计视图中选中 GridView 控件, 打开属性窗口, 点击黄色闪电状图标, 列出 GridView 的所有事件.在 GridView 的 RowUpdating 事件里我们可以看到已经存在一个入口,因为我 们在本节较早的时候已经为此事件创建了一个事件处理程序.为 RowUpdated 事件创建一个事 件处理程序.
图 8: 为 GridView 的事件创建一个事件处理
注意: 注意 你也可以通过代码隐藏文件顶处的下拉列表创建这个事件处理.从左边的下拉列 表中选择这个 GridView 控件,并从右边的下拉
列表中选择 RowUpdated 事件. 创建这个事件处理将添加下面这些代码到 ASP.NET 页面的代码隐藏类中:
1 protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventA rgs e) 2 3 {
4 } 5 这个事件处理程序的第二个输入参数是一个 GridViewUpdatedEventArgs 类型的对象, 它有 三个关于处理异常的属性: Exception –获取更新操作过程中引发的异常;如果没有抛出异常,该属性的值为 null ExceptionHandled –获取或设置一个值,它指示在更新操作过程中所引发的异常是 否已在 RowUpdated 事件处理程序中得到处理;如果设为 false(默认值),该异常将 被重新引发,漏出到 ASP.NET 运行时 KeepInEd