Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用母版页的Web应用的ASP.NET自定义错误页_C#_Asp.net_Visual Studio 2010_Master Pages - Fatal编程技术网

C# 使用母版页的Web应用的ASP.NET自定义错误页

C# 使用母版页的Web应用的ASP.NET自定义错误页,c#,asp.net,visual-studio-2010,master-pages,C#,Asp.net,Visual Studio 2010,Master Pages,参考文献 我了解如何创建自定义错误页面。有许多例子说明了如何做到这一点,如上面的链接 我所找到的例子中没有一个能说明我所追求的是什么 我有一个使用母版页的Web应用程序 在母版页中,我有一个标签控件,用于所有页面都会看到的错误: <h4 id="bannerError"><asp:Label ID="lblError" runat="server" /></h4> ErrorMessage是一个属性。我的其他页面可以很容易地访问它,并且我可以很容易地编辑出关

参考文献

我了解如何创建自定义错误页面。有许多例子说明了如何做到这一点,如上面的链接

我所找到的例子中没有一个能说明我所追求的是什么

我有一个使用母版页的Web应用程序

在母版页中,我有一个标签控件,用于所有页面都会看到的错误:

<h4 id="bannerError"><asp:Label ID="lblError" runat="server" /></h4>
ErrorMessage
是一个属性。我的其他页面可以很容易地访问它,并且我可以很容易地编辑出关于将错误写入服务器数据库的部分

Web.config
页面配置(代码段):



我如何编辑我的文件,以便在我的应用程序中的任何页面上发生任何错误(源自母版页),只需通过母版页显示此基本信息,而不是将页面重定向到另一个URL?

您将无法使用控件为未处理的页面级错误设置错误消息,因为不会创建任何控件(请参见此)。您可以捕获页面级别的错误,并按如下方式设置母版页内容:

    protected override void OnError(EventArgs e) {
        var err = Server.GetLastError().GetBaseException();
        var errorMessage = String.Format("URL {0}: {1} Error: {2}", Request.Url, err.GetType(), err.Message);
        ((MyMasterPageClass)Master).ShowError(errorMessage);
        Server.ClearError();            
    }
然后在母版页中直接设置内容:

    public void ShowError(string message) {
        Response.Write(string.Format("<h4 id=\"bannerError\">{0}</h4>", message));
    }

我试图创建一个JSFIDLE,但由于跨域ajax问题,它有点做作:

我知道问题是关于如何让
母版
解决方案工作,但我认为使用应用程序级
Error
事件是使全面错误处理程序转发到错误页面的最佳方法

您基本上需要处理
Global.asax
文件中的
Application\u错误。在这里,您不仅可以处理所有页面级错误,还可以处理某些类型的应用程序级错误和HTTP错误(如果它们可以到达应用程序管道)

我认为这是一种更好、更合理的方法。也可以添加母版页级或基版页级错误事件处理程序,但作为第二层


寻找一个很好的例子。

你能举一个例子,说明当有人试图访问我的网站不再包含的页面时,jQuery是如何捕获的,比如这个旧文件
www.mywebsite.com/Bugs2012.aspx
?当然,有几种不同的方法可以做到这一点。如果使用了$.get(),则会检查.fail()回调中的响应状态代码,如果是404,则会相应地设置消息。您还可以使用$.ajax()并使用statusCode属性为每个statusCode添加回调。我也不喜欢这种方式,因为它有可能不必要地分割错误处理。我将使用$.get()编辑我的答案以显示一个示例。我知道这不是问题所在,但另一种方法是使用
global.asax
Application\u Error
方法处理此问题。谢谢@EladLachmi。我相信这就是我现在正在做的。我一直在寻找一种更优雅的方法,这种方法被包装在我的母版页中。我们有一个非常大的网站,有许多母版页,我们发现记录所有异常/重定向到应用程序中抛出的所有不同类型异常的错误页的唯一一致方法是这样的。
    protected override void OnError(EventArgs e) {
        var err = Server.GetLastError().GetBaseException();
        var errorMessage = String.Format("URL {0}: {1} Error: {2}", Request.Url, err.GetType(), err.Message);
        ((MyMasterPageClass)Master).ShowError(errorMessage);
        Server.ClearError();            
    }
    public void ShowError(string message) {
        Response.Write(string.Format("<h4 id=\"bannerError\">{0}</h4>", message));
    }
var request = $.get("www.mywebsite.com/Bugs2012.aspx");

request.done(function (data) {
    $("#childContent").html(data);
});

request.fail(function (xhr, status, msg) {
    var displayMsg = "Request could not be completed. ";
    if (status === "error") {
        switch (xhr.status) {
            case 404: 
                displayMsg += "The content could not be found.";
                break;
        }
    }
    $("#bannerError").text(displayMsg);
});