为什么我的 Html Helpers 没有智能感知?

问题描述 投票:0回答:11

我无法为我自己的 html 助手获取智能感知。我的

CustomHtmlHelpers.cs
看起来像这样:

using System.Web.Mvc;
using System.Text;
using System.Web;

    namespace laget.Web.Helpers
    {
        public static class CustomHtmlHelpers
        {
            //MY HELPERS
        }
    }

在我的 Web.config 中:

    <pages>
      <namespaces>
        <add namespace="laget.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers" />
      </namespaces>
    </pages>

如果我将

<@using laget.Web.Helpers>
放在我的视图中,我就能解决智能感知问题。

Web.config 中的代码应该还不够吗?

asp.net-mvc
11个回答
24
投票

有时它似乎并不能立即发挥作用。尝试关闭 .cshtml 文件,然后重新打开它。如果这不起作用,请尝试重新启动 Visual Studio。还要确保您实际编译了您的项目,智能感知将无法与未编译的帮助程序一起使用。


6
投票

我很确定您没有编辑正确的

Web.config
文件。

您需要将命名空间添加到

Views
目录中的命名空间。

<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" />
      <add namespace="laget.Web.Helpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

5
投票

在大多数情况下,您实际上不需要重新启动 Visual Studio。您所需要做的就是关闭 .cshtml 文件并重新打开它!


1
投票

我尝试了所有这些解决方案,我没有找到的另一件事是在根 web.config 中我必须更改网页:版本从 2.0.0.0 到 3.0.0.0。 打开并关闭所有 .cshtml 文件,它就可以工作了。

 <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />

0
投票

本地页面需要它。我很确定这与命名空间解析有关。如果没有本地 using 语句,则不能完全确定您所指的内容。


0
投票

我今天也遇到了这个问题。有时,只需关闭 Visual Studio 中的 Razor 视图窗口并重新打开即可解决问题,而无需完全重新启动 Visual Studio。


0
投票

我昨天尝试解决这样的问题。我有一个预编译的 dll(项目名称:MyHtmlHelpers),其中包含帮助程序和许多其他类。

我在 Web 项目中引用了程序集,并且所有“标准”帮助程序都显示在智能感知中,但是,即使我将命名空间添加到根目录中的 web.config 和视图文件夹中,也没有任何效果。运行项目时助手可以工作,但在智能感知中则不行。

我添加了一个新类,并在 Web 项目中编写了一个新的 html 帮助器,将命名空间添加到了 web.config 中。这很有效。

几个小时后,add 尝试了我的最后一张卡,将 MyHtmlHelpers-project 添加到与我的 web 项目相同的解决方案中。这就成功了。我没有更改配置中的任何内容,只是将项目添加到同一解决方案中,并将引用更改为指向已编译的 dll 所安装的项目。

这不奇怪吗? VS-bug?


0
投票

我发现我添加了对错误 web.config 的引用。它不是主配置,而是views目录中的web.config...


0
投票

现在我将向您展示步骤

1.创建或打开一个现有的类库项目(如果打开现有的请务必删除MVC5 nuget包)

2.添加MVC(5.0)nuget包( 右键单击解决方案资源管理器中的项目 -> 管理 NuGet 包 -> 搜索 MVC 并安装“Microsoft ASP.NET MVC”)

3.关闭所有打开的.cshtml文件

4.右键项目 -> 属性 -> 构建 -> 将输出路径更改为你的项目“bin/”

5.将以下最小Web.config添加到类库项目的根目录中 (Web 配置文件仅用于智能感知。配置(通过 Web.config) 应该在托管 ClassLibrary 程序集的 WebApplication 中完成)

6.清理并构建解决方案。

7.打开cshtml文件并立即尝试:)


0
投票

我发现如果仍然不起作用,您可能需要转到自定义类的属性并将构建操作从“内容”更改为“编译”。 这为我解决了这个问题。


0
投票

除了 Josip Stavalj 建议的更改之外,我还需要对 Views/Web.config 的配置部分进行更改。 具体来说,我需要更改这些行:

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

并将版本字符串从“2.0.0.0”更改为“3.0.0.0”。 我已经为此苦苦挣扎了好几天,谢谢你让我走上正确的道路,Josip。

© www.soinside.com 2019 - 2024. All rights reserved.