2008-12-04 59 views
2

你如何处理Web用户控制事件?我注意到我的自定义Web用户控件有一个事件调用OnError,但是当我调整控件失败时它永远不会触发。该控件基本上是一个自定义的gridview控件。我通过网络搜索网络用户控件事件处理,但是我没有找到一篇文章解决我寻找的问题。有人可以做一个快速解释或指向正确的方向吗?在asp.net页面上处理Web用户控制错误

谢谢

回答

1

你没有提到ASP.NET的味道,所以我将假设VB-C#与连接事件处理程序的例外情况大致相同。

你希望看到的正常模式是沿着这些路线的东西:

用户控制 “的MyUserControl” 代码隐藏

Public Event MyEvent(ByVal Sender As Object, ByVal e As EventArgs) 

Private Sub SomeMethodThatRaisesMyEvent() 
    RaiseEvent MyEvent(Me, New EventArgs) 
End Sub 

页面设计代码

Private WithEvents MyUserControl1 As System.Web.UI.UserControls.MyUserControl 

页或其他控制,它包装的MyUserControl实例代码隐藏

Private Sub MyUserControlEventHandler(ByVal Sender As Object, ByVal e As EventArgs) _ 
    Handles MyUserControl.MyEvent 

    Response.Write("My event handled") 

End Sub 

在某些情况下,你看到的东西称为事件冒泡不遵循这种模式完全吻合。但是从处理用户控件到包装控件或其所在页面的事件的基本意义上来说,这就是你期望它能够工作的方式。

0

我有一个自定义控件抛出的异常没有触发Error事件。因此我无法从该控件捕获异常并在ASP.NET页面中显示适当的消息。

这是我做的。我裹在一个try..catch块自定义控件的代码,并解雇了Error事件自己,像这样:

 
// within the custom control 
try 
{ 
    // do something that raises an exception 
} 
catch (Exception ex) 
{ 
    OnError(EventArgs.Empty); // let parent ASP.NET page handle it in the 
     // Error event 
}

的ASP.NET页面中使用Error事件这样处理异常:

<script runat="server"> 
    void MyCustomControl_Error(object source, EventArgs e) 
    { 
     MyCustomControl c = source as MyCustomControl; 

     if (c != null) 
     { 
      // Notice that you cannot retrieve the Exception 
      // using Server.GetLastError() as it will return null 

      Server.ClearError(); 
      c.Visible = false; 

      // All I wanted to do in this case was to hide the control 
     } 
    } 
</script> 

<sd:MyCustomControl OnError="MyCustomControl_Error" runat="server" />