我正在编写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
。
我怎样才能做到这一点?
答案 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