在 Web 表单中显示异常消息而无需转到 YSD

问题描述

我又在处理 Web 表单,我正在尝试显示异常消息而不进入死亡黄屏 (YSD)。我不想使用那些 try-catch 或进行代码级异常处理,因为我希望它有一个全局异常处理程序或至少一个页面级异常处理程序。

到目前为止,我所做的是将 customError 模式设置为 Off,以免在 YSD 中显示错误

我使用此链接作为参考。 ASP.NET Error Handling

所以在我的页面中,我添加一个标签来在我的 html 页面显示消息

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">    
    <div class="col-lg-4 col-lg-offset-4">
        <div class="form-group">
            <label class=" control-label">Username: </label>
            <asp:TextBox runat="server" ID="Username" CssClass="form-control"></asp:TextBox>
        </div>
        <div class="form-group">
            <label class="control-label">Password: </label>
            <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
        </div>
        <div class="form-group text-center">
            <asp:LinkButton ID="LoginButton" CssClass="btn btn-casa" runat="server" OnClick="LoginButton_click">Login</asp:LinkButton>
            <asp:LinkButton ID="Clear" runat="server" CssClass="btn btn-casa-outline">Clear</asp:LinkButton>
            <span>New user? </span><asp:HyperLink runat="server" CssClass="btn-link" NavigateUrl="~/Pages/Admin/Register.aspx">Register</asp:HyperLink>
        </div>
    </div>
    <div>
        <asp:Label ID="Error" runat="server" Visible="false" CssClass="error-label"></asp:Label>
    </div>
</asp:Content>

这就是我在后面的代码中所做的。

protected void Page_Error()
{
    Exception ex = Server.GetLastError();

    // Handle specific exception.
    
    Error.Text = ex.Message;
    Error.Visible = true;

    // Clear the error from the server.
    Server.ClearError();
    
}

然而,一旦发生异常,它只会显示一个白屏,而不是保留页面本身并在标签显示错误消息。

解决方法

当您进入 Page_Error 时,该页面已不存在

页面级处理程序将用户返回到发生错误的页面,但由于控件实例未维护,页面上将不再有任何内容。

我认为你最好的选择是尝试捕捉

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/aspnet-error-handling#page-level-error-event-handling