位于视图文件夹以外的其他位置@ Url.Action不起作用

时间:2011-12-31 10:38:45

标签: asp.net-mvc asp.net-mvc-3 razor

我有一个Test.cshtml视图,我可以在其中编写类似的代码:

@Url.Action(.....)

当页面位于Views文件夹下时,它可以正常工作。

当页面位于Themes文件夹下的其他位置时,它不再起作用。

2 个答案:

答案 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