首页 > 解决方案 > 从区域返回通用错误视图:如何使用控制器区域中的 _Layout 包装器?

问题描述

我有一个BaseController带有错误视图的功能,效果很好:

public ViewResult ErrorView(string error, string errormessage)
{
    ViewBag.ErrorType = error;
    ViewBag.ErrorMessage = errormessage;
    return View("~/Views/Shared/Error.cshtml");
}

从我的普通控制器扩展BaseController并调用这个函数就像一个魅力。它包裹了视图Views/Shared/_Layout.cshtml,一切都很好。

但是,当我从一个区域中扩展 basecontroller 的控制器调用此函数时,它也会将视图包装在Views/Shared/_Layout.cshtml而不是Areas/MyArea/Views/Shared/_Layout.cshtml

如何在不ErrorView为我的区域编写单独的函数的情况下更改此行为?

标签: asp.net-mvcrazorasp.net-mvc-areas

解决方案


这就是这些地区的问题。由于我不确定该框架是否可以推断出您所在的区域,因此我建议您这样做:

在您的 Area/Controllers 文件夹中添加一个 AreaBaseController,它将设置一个属性,女巫会告诉它。

在您的 BaseController 中:

public string Area { get; set; }

public ViewResult ErrorView(string error, string errormessage)
{
    ViewBag.ErrorType = error;
    ViewBag.ErrorMessage = errormessage;
    return View($"~/{Area}/Views/Shared/Error.cshtml");
}

在那个 AreaBaseController 中:

public AreaBaseController()
{
    Area = "MyArea";
}

您可能会更改 $"~/{Area}/ 部分,因为我没有尝试过,但它应该可以进行一些更改。

希望有帮助!


推荐阅读