Asp.net mvc 3 ASP.NET MVC如何在两个同名视图(aspx和razor)之间进行仲裁?
我使用ASP.NET MVC3创建了一个新的Razor视图,并将其命名为与我一直使用的现有.aspx视图相同的名称。我注意到控制器继续选择.aspx视图(与动作同名),这与我的预期非常接近。然后我重命名了.aspx视图,action选择了razor.cshtml视图 因此,如果我有两个名为myview.aspx和myview.cshtml的视图,以及一个名为myview()的操作,该操作执行返回视图(),它将拾取myview.aspx视图并返回该视图 MVC3如何决定默认的视图类型?Asp.net mvc 3 ASP.NET MVC如何在两个同名视图(aspx和razor)之间进行仲裁?,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我使用ASP.NET MVC3创建了一个新的Razor视图,并将其命名为与我一直使用的现有.aspx视图相同的名称。我注意到控制器继续选择.aspx视图(与动作同名),这与我的预期非常接近。然后我重命名了.aspx视图,action选择了razor.cshtml视图 因此,如果我有两个名为myview.aspx和myview.cshtml的视图,以及一个名为myview()的操作,该操作执行返回视图(),它将拾取myview.aspx视图并返回该视图 MVC3如何决定默认的视图类型? 有没有办法
有没有办法更改此默认行为,使其更喜欢razor视图而不是.aspx视图?我想这取决于视图引擎的注册顺序。将首先查询以前注册的视图引擎。如果要更改订单,请执行以下操作:
ViewEngines.Engines.Insert(0, ...);
一切都取决于
ViewEngines.engines
集合中视图引擎的顺序。下面是静态构造函数的外观(如ASP.NET MVC 3 RTM中的Reflector所示):
这就解释了为什么WebForms是首选的视图引擎
因此,您可以在应用程序\u Start
中执行以下奇怪的hack操作,以反转对Razor的偏好:-)
static ViewEngines()
{
ViewEngineCollection engines = new ViewEngineCollection();
engines.Add(new WebFormViewEngine());
engines.Add(new RazorViewEngine());
_engines = engines;
}
var aspxVe = ViewEngines.Engines[0];
var razorVe = ViewEngines.Engines[1];
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(razorVe);
ViewEngines.Engines.Add(aspxVe);