CSHTML 文件未加载到视图之外

CSHTML files not loading outside of Views

我有一个 C# MVC Razor 网站。通常,控制器从 Views 文件夹加载视图。但是,我有一种特殊情况需要在 Views 文件夹之外渲染视图。我该怎么做?

我已经在Controller中尝试了return Redirect("/Random/Index.cshtml"),目前完全没有控制器。

奇怪的是它适用于我的生产环境,但不适用于本地主机。在本地主机我得到:

The type of page you have requested is not served because it has been explicitly forbidden. The extension '.cshtml' may be incorrect. Please review the URL below and make sure that it is spelled correctly.

Requested URL: /Random/Index.cshtml

你绝对可以做到这一点。为此,您需要创建一个新的自定义视图引擎,例如

public class MyViewEngine : RazorViewEngine
{
    private static string[] AdditionalViewLocations = new[]{
        "~/Random/{0}.cshtml"
    };

    public MyViewEngine()            
    {
        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(AdditionalViewLocations).ToArray();
        base.ViewLocationFormats = base.ViewLocationFormats.Union(AdditionalViewLocations).ToArray();
        base.MasterLocationFormats = base.MasterLocationFormats.Union(AdditionalViewLocations).ToArray();
    }
}

然后在你global.asax的Application_Start方法中像这样注册这个视图引擎-

ViewEngines.Engines.Add(new MyViewEngine ());

如果您希望您的视图引擎优先,请将其插入第 0 个位置。像这样 -

ViewEngines.Engines.Insert(0, new MyViewEngine());

return View("~/AnotherFolder/Index.cshtml")` 应该适合您。

不要忘记在索引视图中指明布局:

@{
   Layout="~/Views/Shared/Layout.cshtml";
}