iLe*_*ing 1 c# asp.net-mvc asp.net-mvc-3
我已经将旧的MVC2项目转换为MVC3.现在我有.aspx视图和razor .cshtml.
假设我有一个与控制器(HomeController
,Index
动作和~\Views\Home\Index.aspx
)相关的视图,同时我仍然有完全不同 的观点~\Views\Shared\Index.aspx
.
通常在Index
Action调用View()
它渲染时~\Views\Home\Index.aspx
.但是,如果我将视图转换为剃刀视图,则执行相同的操作而不是渲染~\Views\Home\Index.cshtml
调用
~\Views\Shared\Index.aspx
.
所以我猜MVC优先考虑.aspx页面而不是.cshtml.也许我需要在web.config文件中更改一些内容,因为现在我必须明确告诉它要获取哪个视图:
View("~\Views\Home\Index.cshtml")
Run Code Online (Sandbox Code Playgroud)
即使我删除了扩展名,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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它支持所有aspx/ascx文件,即使在共享目录中也是如此,在类似的razor视图之前.
一个解决方案是让MVC Razor支持.cshtml优于.aspx,但是这个解决方案并没有重新关联aspx/ascx文件.所以你需要这样的东西:
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
ViewEngines.Engines.Add(new WebFormViewEngine());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2117 次 |
最近记录: |