在asp.net中捕获Page_Error时如何继续页面显示

时间:2017-01-13 02:06:12

标签: c# asp.net .net

假设我有一个网络表单,上面有一些标签,文本框。 webform还有一个gridview来读取xml文件。假设我输入了一个wring文件名:

protected void Page_Load(object sender, EventArgs e)
{
   DataSet DS = new DataSet();
   DS.ReadXml(Server.MapPath("~/wrongfilename.xml")); // raise an error
   GridView1.DataSource = DS;
   GridView1.DataBind();
}

这是页面错误处理程序:

protected void Page_Error(object sender, EventArgs e)
{
   Exception ex = Server.GetLastError();
   Server.ClearError();
}

所以我实际上处理了这个错误并清除了这个错误。因此gridview没有数据显示,足够公平。但是当我执行程序时页面仍然是一个空白页面,我想我至少应该得到文本框,标签显示为空的gridview,但它只是一个空白页面。为什么页面没有显示其他组件以及如何显示其他组件?

2 个答案:

答案 0 :(得分:1)

如果您试图忽略该错误,那么您在Page_Error中编写的代码是错误的方法。一旦你到达Page_Error,为了挽救发生错误的页面的渲染已经太晚了。 Page_Error应该用于优雅地处理意外的异常,例如记录错误和/或将它们重定向到错误页面。

如果您希望在解析xml出错后继续加载页面,我建议你需要....

protected void Page_Load(object sender, EventArgs e)
{
   DataSet DS = new DataSet();
   try
   {
       DS.ReadXml(Server.MapPath("~/wrongfilename.xml")); // raise an error
   }
   catch(Exception ex)
   { 
      // error handling 
   }
   GridView1.DataSource = DS;
   GridView1.DataBind();
}

注意:通常我会捕获您在程序正常运行时可能会遇到的特定异常,但不建议捕获Exception类型的异常。我已经使用了Exception类型,因为您没有指定您正在尝试处理的正在接收的Exceptions。在这里阅读更多内容......

Why not catch general Exceptions

答案 1 :(得分:0)

只需传递/隐藏错误

 protected void Page_Load(object sender, System.EventArgs e)
        {
            try
            {
                throw new Exception();
            }
            catch (Exception ex)
            {
            }
        }
        public void Page_Error(object sender, EventArgs e)
        {
            Response.Write("This page is not valid.");
        }