过混合MVC3项目的ASPX剃刀意见优先(Priority of razor views over

2019-10-16 15:57发布

我已经转换旧MVC2项目MVC3。 现在我有剃刀.cshtml一起的.aspx意见。

比方说,我有一个控制器相关联的视图( HomeControllerIndex的行动和~\Views\Home\Index.aspx ),并在同一时间,我还是有完全不同的~\Views\Shared\Index.aspx

通常,当Index操作调用View()它呈现~\Views\Home\Index.aspx 。 但是,如果我转换成视图Razor视图,同样的动作,而不是渲染~\Views\Home\Index.cshtml调用~\Views\Shared\Index.aspx

所以我想MVC优先为.aspx页面,而到.cshtml。 也许我需要更改web.config文件中的东西,因为现在我要明确告诉它该视图来获取:

View("~\Views\Home\Index.cshtml")

即使我把扩展View("~\Views\Home\Index")它仍然会调用共享的.aspx观点,虽然我已经在正确的道路。 奇怪,不是吗?

Answer 1:

你遇到的问题是MVC视图的默认优先级。 这是默认的:

~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Home/Index.cshtml
~/Views/Home/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml 

正如你所看到的,这有利于所有的aspx / ascx的文件,即使在共享目录中,之前类似剃须刀的看法。

一个解决方案是获得MVC剃刀偏袒的.aspx .cshtml , 但是这种解决方案并不重新关联的ASPX / ASCX文件 。 所以,你需要这样的:

protected void Application_Start() 
{ 
  ViewEngines.Engines.Clear(); 
  ViewEngines.Engines.Add(new RazorViewEngine()); 
  ViewEngines.Engines.Add(new WebFormViewEngine()); 
} 


文章来源: Priority of razor views over the aspx in mixed MVC3 project