7

VS2010 Ultimate,带有 Razor 的 ASP.NET MVC 3。

我在我的 MVC3 应用程序中创建了一个自定义视图引擎,它允许嵌套区域,就像这样

~/areas/admin
    /marketing
        /views
            index       
        /controllers
            marketingController
        /email
            /views
                index
                ...
            /controllers
                emailController
        /templates
            /views
                index
                edit
                ...                  
            /controllers
                templatesControler

等等

这一切都很好,除了我似乎在不在标准~/areas/area_name/views/myview.cshtml位置的视图中失去了智能感知。

有什么建议么?

更新

就在云雀上,我添加了一个@inherits 声明

@inherits System.Web.Mvc.WebViewPage<Namespace.Models.Class>

智能感知开始工作。然后我删除了该声明,它继续工作。

项目文件中是否有一些设置或告诉 Visual Studio 什么样的智能感知应用于打开的文件,而不是文件扩展名?(如果仅使用扩展名,我希望它会更加一致)。

更新 2

虽然向我的每个视图文件夹添加 web.config 可以很好地解决问题,但将 razor 配置放在根 web.config 中却没有。

将所需system.web.webPages.razor部分添加到后~/web.config

  1. 我将 Razor .cshtml 视图文件添加到我的嵌套视图文件夹之一。
  2. 智能感知有效。
  3. 我重命名文件(保留 .cshtml 扩展名)
  4. Intellesense 和语法高亮停止工作。
  5. 我关闭重命名的文件并重新打开它——一切又开始工作了。
  6. 或者,我没有关闭并重新打开文件,而是将其重命名为原来的名称,它再次开始工作。

这感觉就像一个 VS 错误 - 据我所知,重命名文件(但保留正确的扩展名)不应该导致这种行为。我将继续web.config在我的每个视图文件夹中放置单独的 s,因为它可以解决问题,但是当我希望这些设置像其他 web.config 设置一样通过解决方案树传播时,不得不弄乱解决方案是很烦人的。

还值得注意的是,无论 Razor 配置位于何处,无论智能感知是否正常工作,该站点都会继续正常运行。

解决了

Powers That Be 告诉我(难以置信地迅速)这是一个已知问题,已在 MVC3 RTM 和 VS2010 SP1 中得到纠正。更新我的 MVC3 安装并添加 SP1 后问题消失了。

4

1 回答 1

7

Views 文件夹包含一个Web.config 文件,该文件设置 Razor 视图的默认选项,包括默认的基本类型和命名空间,以及启用该@model指令的自定义主机。

不同文件夹中的 Razor 视图不会继承此配置。
您需要将此配置添加到Web.config文件夹中的 a:

<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>
于 2011-02-06T03:44:59.213 回答