Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 ASP.NET MVC如何在两个同名视图(aspx和razor)之间进行仲裁?_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc 3 ASP.NET MVC如何在两个同名视图(aspx和razor)之间进行仲裁?

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如何决定默认的视图类型? 有没有办法

我使用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);