【问题标题】:ASP.NET MVC3 Razor - lost intellisense when placing view in alternate location?ASP.NET MVC3 Razor - 将视图放置在备用位置时失去智能感知?
【发布时间】:2011-02-06 01:00:13
【问题描述】:

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. 智能感知和语法高亮停止工作。
  5. 我关闭重命名的文件并重新打开它 - 一切又开始工作了。
  6. 或者,我没有关闭并重新打开文件,而是将其重命名回原来的名称,它又开始工作了。

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

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

已解决

Powers That Be 通知我(非常快)这是一个已知问题,已在 MVC3 RTM 和 VS2010 SP1 中得到纠正。更新我的 MVC3 安装并添加 SP1 后问题消失了。

【问题讨论】:

  • 你是对的;这听起来像一个VS错误。电子邮件 ScottGu@Microsoft.com。
  • 会的。终于有理由去看甲骨文了。

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


【解决方案1】:

Views 文件夹包含一个Web.config file that sets default options for Razor views,包括默认的基本类型和命名空间,以及一个启用@model 指令的自定义主机。

其他文件夹中的 Razor 视图不会继承此配置。
您需要将此配置添加到文件夹中的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>

【讨论】:

  • 出色的调用,快速修复,虽然我真的不明白为什么这些设置不会从根 web.config 传播。有什么见解吗?
  • 根网络配置没有定义这些设置。但是你可以自己添加它们。
  • @David:它们只添加到Views/Web.config 以避免破坏其他文件夹中的非 MVC 页面。
  • 好吧,这很有道理。因此,理论上,如果应用程序完全是 MVC,我可以将此部分放在根配置中。
猜你喜欢
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多