我有一个Test.cshtml视图,我可以在其中编写类似的代码:
@Url.Action(.....)
当页面位于Views文件夹下时,它可以正常工作。
当页面位于Themes文件夹下的其他位置时,它不再起作用。
答案 0 :(得分:2)
当页面位于Themes文件夹下的其他位置时,它不再起作用。
这是正常的。视图应仅位于视图文件夹中。他们在外面无所事事。
原因是~/Views/web.config
文件指示所有视图的类型:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
请注意pageBaseType
属性?这表明视图派生自定义Html和Url助手等属性的System.Web.Mvc.WebViewPage
类。
当你在Views文件夹之外的某个地方放置一个视图时,我想你忘了在root上包含这样一个web.config,所以没有任何内容指定你的剃刀页面的基本类型,因此不再需要Url和Html帮助器之类的东西存在。
因此,有一种可能性是违反所有标准的ASP.NET MVC约定,并将~/Views/web.config
文件复制到您打算放置视图的任何位置。
答案 1 :(得分:1)
MVC基于惯例。所以html页面应该在
中找到~/Views/ControllerName/MyView.cshtml
or
~/Views/Shared/MyView.cshtml