无法使defaultRedirect工作

时间:2011-06-02 07:56:31

标签: asp.net-mvc asp.net-mvc-3

在我的web.config中,我有:

<system.web>
    <customErrors mode="On" defaultRedirect="Error.cshtml" />
</system.web>

在Views / Shared / Error.cshtml中,我有:

@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = "Error";
}
<h2>
    Sorry, an error occurred while processing your request.
</h2>

如果我将无效的网址/路由放入浏览器,我会收到:

  应用程序中的服务器错误。

     

无法找到资源。

     

描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

     

请求的网址:/Error.cshtml

为什么找不到Error.cshtml?该文件肯定在Views / Shared中。

5 个答案:

答案 0 :(得分:8)

defaultRedirect不会直接转到视图。您的defaultRedirect看起来像一个无法处理的剃刀视图文件。例如:它从哪里获得模型?它不是也不能在配置文件中指定,因此它无法处理视图。

如果您想在MVC中使用更多动态错误页面,可能需要阅读custom error pages and error handling in MVC 3

答案 1 :(得分:5)

它对我有用。只需在web.config中进行此更改:

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

答案 2 :(得分:3)

将web.config编辑为:

<system.web>
    <customErrors mode="On" defaultRedirect="/Home/Error" />
</system.web>

如果您使用asp.net mvc 1.0或2.0,则应为每个控制器添加HandleError属性:

[HandleError]
public class HomeController: Controller
{
    public ActionResult Error()
    {
        return View();
    }
}

如果你使用asp.net mvc 3.0:

public class MvcApplication : System.Web.HttpApplication
{
        protected void Application_Start()
        {
            GlobalFilters.Filters.Add(new HandleErrorAttribute());
        }
}

答案 3 :(得分:2)

您应该使用[HandleError]属性标记控制器操作,或将其注册为全局过滤器

修改 它发生的原因是自定义错误'重定向功能属于ASP.NET基础结构,对ASP.NET MVC一无所知。

您应该创建单独的控制器来管理重定向,并在Web.config中指定它的URL。或者你可以创建静态html文件并将其放入根目录(或除了Views目录之外的任何地方)

答案 4 :(得分:1)

一个解决方案是创建ErrorController

public class ErrorController : Controller
{
    //
    // GET: /Error/

    public ActionResult Error()
    {
        return View();
    }

    public ActionResult Error404()
    {
        return View("Error");
    }

}

更改Web.config