C#MVC5将自定义错误页面包含到母版页中

时间:2019-07-01 11:57:06

标签: c# asp.net-mvc-5

我们有几个c# mvc5应用。为了集中处理未处理的异常,我希望在主页上有一个自定义错误页面,并在每个应用程序中使用global.asax(在每个应用程序中)重定向到~Shared/Error,以防在任何情况下导致未处理的异常我的志趣。

  • Error.cshtml添加到了我的母版页共享文件夹中
  • 在母版页中将ActionResult Error()添加到了SharedController.cs
namespace MasterpageMvc.Controllers
{
    [Localizable]
    public class SharedController : Controller
    {
        private SharedViewModel SharedViewModel { get; } = new SharedViewModel();

        ...

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

    }
}
  • 用我的母版制作了一个NugetPack,并将NugetPack添加到了我的AppX
  • 禁止添加错误过滤器(AppX)
namespace ApplicationX
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //filters.Add(new HandleErrorAttribute());
        }
    }
}
  • 在global.asax.cs(AppX)中添加了Application_Error
namespace ApplicationX
{

    public class MvcApplication : System.Web.HttpApplication
    {

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

        protected void Application_Error()
        {
            // Log error to eventlog using NLog
            // ...

        }
    }
}
  • 将web.config(AppX)中的自定义错误重定向到〜/ Shared / Error
<system.web>
    <customErrors mode="On" defaultRedirect="~/Shared/Error">
      <error statusCode="404" redirect="~/Shared/Error" />
    </customErrors>
  </system.web>

我得到的错误:

System.InvalidOperationException: The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Home/Error.cshtml
~/Views/Shared/Error.cshtml
~/Views/Shared/Masterpage/Error.cshtml

我们非常感谢您的帮助! TIA acki

1 个答案:

答案 0 :(得分:0)

在操作中添加视图名称,以及是否需要母版页名称作为第二个参数

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