我有一个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
答案 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";
}