使用ASP.NET MVC3我创建了一个新的Razor视图,并为它提供了与我一直使用的现有.aspx视图相同的名称。我注意到控制器继续拿起.aspx视图(与动作同名),这正是我的预期。然后我重命名了.aspx视图并且操作选择了剃刀.cshtml视图。
因此,如果我有两个名为myview.aspx和myview.cshtml的视图以及一个名为MyView()的Action,它返回View(),它将获取myview.aspx视图并返回该视图。
MVC3如何决定默认哪种视图类型? 有没有办法更改此默认行为,以更喜欢.aspx视图上的剃刀视图?
答案 0 :(得分:4)
所有内容都归结为ViewEngines.Engines
集合中视图引擎的顺序。以下是ViewEngines
静态构造函数的外观(如ASP.NET MVC 3 RTM中的Reflector所示):
static ViewEngines()
{
ViewEngineCollection engines = new ViewEngineCollection();
engines.Add(new WebFormViewEngine());
engines.Add(new RazorViewEngine());
_engines = engines;
}
解释了为什么WebForms是首选的视图引擎。
所以你可以在Application_Start
执行以下奇怪的黑客攻击来反转对Razor的偏好: - )
var aspxVe = ViewEngines.Engines[0];
var razorVe = ViewEngines.Engines[1];
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(razorVe);
ViewEngines.Engines.Add(aspxVe);
答案 1 :(得分:1)
我认为它可以归结为视图引擎的注册顺序。将首先查询先前注册的视图引擎。如果您想更改订单:
ViewEngines.Engines.Insert(0, ...);