【问题标题】:ASP .Net User control error handlingASP .Net 用户控制错误处理
【发布时间】:2012-07-12 19:43:31
【问题描述】:

我们正在使用带有 C# 的 asp .Net。我的页面(.aspx)由多个 Web 用户控件(.ascx)组成

我希望有一个错误处理机制,如果其中一个用户控件有任何异常,asp .net 应该在控件上显示一些友好的错误消息。所有其他控件应按预期呈现。

有没有什么方法可以做到这一点,而不需要在每个控件上放置占位符,以防出现异常?

【问题讨论】:

  • 异常通常在什么时候发生?我会尝试让每个用户控件在内部而不是全局处理它。
  • 异常通常会发生在用户控件中(例如,某些数据库连接错误、类型转换错误等)。
  • 您应该将数据库调用和强制转换操作包装在一个 try/catch 中,所有这些都应该在用户控件中完成。当我编程时,我倾向于只捕获可以处理的异常,我只是让应用程序失败的关键事情。
  • 你指的是什么类型的错误处理?验证用户输入?处理服务器错误?客户端错误?
  • 是的,我明白这一点。但我正在寻找一些通用的解决方案。我有 30 多个用户控件,因此我尽量避免在每个控件级别进行更改。

标签: c# asp.net .net iis


【解决方案1】:

你可以这样做。

具有每个 UserControl 必须实现的抽象 OnLoad() 的抽象基类。您可以对任何想要共享错误处理的事件使用相同的模型。

public abstract class BaseUserControl : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            OnLoad();
        }
        catch (Exception)
        {
            //Custom error handling here
        }
    }

    protected abstract void OnLoad();
}

public class MyUserControl: BaseUserControl
{
    protected override void OnLoad()
    {
        //My normal load event handling here
    }
}

【讨论】:

  • 这适用于一般事件的情况,但是点击事件和控件引发的其他事件呢?
【解决方案2】:

1) 在app_code中,创建一个继承Page的类MyPage.cs

class MyPage : Page { }

2) 将页面的继承更改为 MyPage。

public partial class _Default : MyPage { ...

web.config 中有一个属性,您可以根据需要更改它

3) 回到 MyPage.cs,添加所有页面的通用错误处理程序

protected override void OnError(EventArgs e)
{
    /* here you can intercept the error and show the controls that you want */
    base.OnError(e);
}

【讨论】:

  • 感谢您的回答。我们正在使用内容管理系统调用 Sitecore。我有一个页面和控件(.ascx)是动态添加的。
【解决方案3】:

首先创建一个覆盖默认 onerror 事件的基本用户控件类。

 public class MyControlClass:UserControl
        {

            protected override void OnError(EventArgs e)
            {
                //here you sould add your friendly msg implementation



                //base.OnError(e); here should remain commented
            }
        }

然后你可以创建你的用户控件:

public class Control1:MyControlClass
    {
        // ....
        // ....
    }

因此,如果任何控件创建异常,其余控件将继续工作。

【讨论】:

猜你喜欢
  • 2016-06-22
  • 2011-03-18
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多