CSHTML文件未加载到视图外部

时间:2015-02-27 14:30:08

标签: c# asp.net-mvc-4 razor

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

  • 控制器将加载/Views/Random/Index.cshtml

  • 无法加载/Random/Index.cshtml

  • /Random/test.aspx加载没有问题,但无法将cshtml文件更改为aspx文件,需要定期构建。

我已尝试在Controller中返回Redirect(“/ Random / Index.cshtml”),目前根本没有控制器。

奇怪的是它适用于我的生产环境,但不适用于localhost。在localhost中我得到:

  

您已请求的页面类型未被提供,因为它已被明确禁止。扩展名“.cshtml”可能不正确。请查看下面的网址,确保拼写正确。

     

请求的网址:/ Random / Index.cshtml

2 个答案:

答案 0 :(得分:4)

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

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());

答案 1 :(得分:2)

return View(“〜/ AnotherFolder / Index.cshtml”)`应该适合你。

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

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