如何在MVC3的Html Helper中启用Intellisense?

时间:2011-04-08 16:37:16

标签: asp.net-mvc-3 .net-4.0 html-helper

我基本上遵循了这篇文章:http://develoq.net/2011/how-to-create-custom-html-helpers-for-asp-net-mvc-3-and-razor-view-engine/

我的HtmlHelper类位于我的MVC项目的根目录中:

using System.Web.Mvc;

namespace MvcHtmlHelpers
{
    public static class HtmlHelperExtensions
    {
        public static MvcHtmlString Hello(this HtmlHelper helper)
        {
            return new MvcHtmlString("Hello!");
        }
    }
}

如果我在视图中引用它:@using MvcHtmlHelpers;我得到intellisense并且查看代码验证正常(没有红色下划线)。

如果我没有在View中引用它,但是在2个web.config文件中的一个或两个中引用它,我就不会得到intellisense,而@Html.Hello()现在是红色下划线。

现在最好的部分是,当我跑步时,即使我没有在任何地方引用它,它也会完美呈现。理想情况下,我想在web.config中引用一次,并在视图中获取Intellisense,而不在该视图中引用它。

更新:我猜某些东西被缓存了。当它没有在任何地方被引用时它不会呈现。对不起。我仍然希望在视图中获得Intellisense和验证。

1 个答案:

答案 0 :(得分:3)

如果您使用的是Razor视图引擎,则需要在~/Views/web.config而不是~/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" />
        <add namespace="MvcHtmlHelpers" />
      </namespaces>
    </pages>
</system.web.webPages.razor>

然后重新编译,关闭并重新打开Razor视图,如果这是你的幸运日,你甚至可能会获得Intellisense。如果不是,你可能会诅咒微软。