混合 MVC3 项目中剃须刀视图相对于 aspx 的优先级
本文关键字:相对于 aspx 优先级 视图 剃须刀 MVC3 项目 混合 | 更新日期: 2023-09-27 18:32:17
我已经将旧的MVC2项目转换为MVC3。现在我有.aspx视图以及 razor .cshtml。
假设我有一个与控制器(HomeController
、Index
动作和~'Views'Home'Index.aspx
)相关联的视图,同时我仍然有完全不同的~'Views'Shared'Index.aspx
。
通常,当Index
操作调用View()
时,它会呈现~'Views'Home'Index.aspx
。但是,如果我将视图转换为剃须刀视图,则相同的操作而不是呈现~'Views'Home'Index.cshtml
调用 ~'Views'Shared'Index.aspx
.
所以我想MVC优先考虑.aspx页面而不是.cshtml。也许我需要更改 web.config 文件中的某些内容,因为现在我必须明确告诉它要获取哪个视图:
View("~'Views'Home'Index.cshtml")
即使我删除扩展View("~'Views'Home'Index")
它仍然会调用共享.aspx视图,尽管我有正确的路径。很奇怪不是吗?
您遇到的问题是 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 文件,即使在共享目录中,也优先于类似的 razor 视图。
一种解决方案是让 MVC Razor 优先于 .aspx .cshtml,但是此解决方案不会重新关联 aspx/ascx 文件。所以你需要这样的东西:
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
ViewEngines.Engines.Add(new WebFormViewEngine());
}