1

我有一个导致“Internet Explorer 无法显示网页”错误的代码块。当我单击提交按钮时,在未选中任何单选按钮的情况下,网页状态栏显示“等待主机响应”,然后显示“Internet Explorer 无法显示网页”。当我在 Visual Studio 中浏览代码时,代码执行得很好,并且没有执行任何 catch 块。

在此处输入图像描述

如何捕获错误并确定显示错误页面的原因?

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            if (rbtnSearchBy1.Checked)
            {
                Server.Transfer("ViewEmpHistory.aspx");
            }
            if (rbtnSearchBy2.Checked)
            {
                Server.Transfer("SearchEmp.aspx");
            }
            if (rbtnSearchBy3.Checked)
            {
                Server.Transfer("ViewEmpCard.aspx");
            }
        }

        catch (ThreadAbortException)
        {
            throw;
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
    }
4

4 回答 4

1

如果你不选择一个单选按钮,你不输入你的 catch 是正常的,因为你的应用程序没有抛出异常。但你可以查看你的事件日志

输入您的 cmd : eventvwr 以访问您的事件日志

在此处输入图像描述

于 2012-07-03T15:06:27.110 回答
1

为了调试这类问题,我经常发现使用 Tracing 更容易。

您可以在应用程序级别页面级别打开跟踪。

您的方法调用将变为:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    try
    {
        if (rbtnSearchBy1.Checked)
        {
            Server.Transfer("ViewEmpHistory.aspx");
        }
        if (rbtnSearchBy2.Checked)
        {
            Server.Transfer("SearchEmp.aspx");
        }
        if (rbtnSearchBy3.Checked)
        {
            Server.Transfer("ViewEmpCard.aspx");
        }
    }
    catch(Exception ex)
    {
        Trace.Warn("Exception Caught", "Exception: btnSubmit_Click", ex);
    }
}

您可以通过导航到Trace Viewer 查看跟踪日志。

于 2012-07-03T15:34:27.653 回答
1

无论您的“btnSubmit_Click”在什么 .cs 页面上,都在该page_load 事件上放置一个断点。
此外,在“ViewEmpHistory.aspx”、“SearchEmp.aspx”和“ViewEmpCard.aspx”的 page_load 事件上放置一个断点。(所以现在你有四个断点)。

再次单步执行项目并确保所有参数值都正确传递,还确保您对If (!PostbacK)条件等 具有正确的逻辑(如果适用)。

高温高压

于 2012-07-05T01:51:59.243 回答
0

你所做的并不完全是结构良好的。如果这些块是独占的,那就更清楚了——这就是我在下面的代码中添加 else 语句的原因。我还指出了您希望在哪里处理评论中未选中任何按钮的状态。

但是你是对的,没有任何异常被抛出。您的代码没有抛出一个,当您结束处理请求而不返回任何类型的响应时,它不会导致异常。

        if (rbtnSearchBy1.Checked)
        {
            Server.Transfer("ViewEmpHistory.aspx");
        }
        else if (rbtnSearchBy2.Checked)
        {
            Server.Transfer("SearchEmp.aspx");
        }
        else if (rbtnSearchBy3.Checked)
        {
            Server.Transfer("ViewEmpCard.aspx");
        }
        else
        {
          // Here's where the logic will flow to if no radio button is clicked.
          // We could 
          // * Server.Transfer to a default location
          // * Throw an exception
          // * Do nothing, which returns no response, and causes
          //   IE to complain that it could not display the webpage.
        }
于 2015-09-14T20:36:33.577 回答