MVC 5错误页面未显示

时间:2015-03-03 04:48:44

标签: c# exception error-handling asp.net-mvc-5 asp.net-mvc-views

我正在编写MVC 5互联网应用程序并遇到错误问题。

输入一些无效的View数据时,我收到与正在显示的错误页面相关的错误。

我正在输入以下内容:

<html>test</html>

在我的Global.asax文件中,我有以下内容:

protected void Application_Error(object sender, EventArgs e)

这是Application_Error函数中的错误:

Message = "The controller for path '/Error/' was not found or does not implement IController."

在我的Shared views文件夹中,我有一个名为Error.cshtml的错误页面。

以下是Error.cshtml的代码:

@model System.Web.Mvc.HandleErrorInfo

@{
    if (TempData["UITitle"] != null)
    {
        ViewBag.Title = @TempData["UITitle"];
    }
    else
    {
        ViewBag.Title = "Error";    
    }
}

<h2 class="text-danger">
    @if (TempData["UIHeading"] != null)
    {
        @TempData["UIHeading"];
    }
    else
    {
        <p>Error</p>
    }
</h2>

<p>
    @if (TempData["UIMessage"] != null)
    {
        @TempData["UIMessage"];
    }
    else
    {
        if (Model != null)
        {
            @Model.Exception.Message
        }
        else
        {
            <p>Error</p>
        }
    }
</p>

为什么我收到错误:

Message = "The controller for path '/Error/' was not found or does not implement IController."

提前致谢。

修改

我在ActionResult中添加了以下controller

public async Task<ActionResult> TestError()
{
    return View("Error");
}

错误页面显示正确。

此外,我已安装ELMAH电子邮件记录例外情况。

EDIT2

我认为问题出在我的web.config。

我在web.config中有以下内容:

<customErrors mode="On" defaultRedirect="~/Error/">
</customErrors>

每当发生错误时,我希望显示Error.cshtml文件夹中的Shared。我猜不能找到Error.cshtml文件夹中的Shared

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您的错误消息表明您需要一个与URL =&gt;对应的操作方法'/错误'。

然后,此操作应返回View("Error.cshtml");(使用正确的路径)。

如果您的重定向位于web.config文件中,请尝试以下操作:

<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
</customErrors>

答案 1 :(得分:0)

Global.asax

中添加以下内容
  

P.S:根据您的要求更改控制器的名称和操作   声明和其他mods根据你的需要

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim exception As Exception = Server.GetLastError()
        If exception Is Nothing Then
            Exit Sub
        End If
        Dim httpException As HttpException = TryCast(exception, HttpException)
        If httpException IsNot Nothing Then

            Dim routeData As New RouteData()
            routeData.Values.Add("controller", "Error")
            Select Case httpException.GetHttpCode()
                Case 403, 404
                    ' page not found
                    routeData.Values.Add("action", "errorpage404")
                Case Else
                    routeData.Values.Add("action", "errorpage40x)
            End Select
            If httpException.GetHttpCode() = 500 Then
                'TODO
                'Logging
            End If

            'routeData.Values.Add("error", exception)
            ' clear error on server
            Response.Clear()
            Server.ClearError()
            Dim errorController As IController = New ErrorController()
            errorController.Execute(New RequestContext(New HttpContextWrapper(Context), routeData))
        End If
    End Sub