Как включить Intellisense в Html Helper с помощью MVC3?

#asp.net-mvc-3 #.net-4.0 #html-helper

#asp.net-mvc-3 #.net-4.0 #html-помощник

Вопрос:

Я в основном следил за этой статьей: 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, и код представления проверяется нормально (без красных подчеркиваний).

Если я не ссылаюсь на него в представлении, но ссылаюсь на него в одном или обоих из 2 файлов web.config, я не получаю intellisense и @Html.Hello() теперь он подчеркнут красным.

Теперь самое приятное то, что при запуске он отлично отображается, даже если у меня вообще нигде нет ссылок на него. В идеале я хотел бы сослаться на него один раз в web.config и получить Intellisense в представлении, не ссылаясь на него в этом представлении.

ОБНОВЛЕНИЕ: я предполагаю,что что-то где-то было кэшировано. Он НЕ отображается, когда на него нигде нет ссылок. Прошу прощения. Я все еще хотел бы получить Intellisense и проверку в представлении.

Ответ №1:

Если вы используете Razor view engine, вам нужно ссылаться на него в ~/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 view, и, если вам повезет, вы, возможно, даже получите Intellisense. В противном случае вы можете проклинать Microsoft.

Комментарии:

1. @Dimskiy, если вы добавите правильное пространство имен в ~/Views/web.config , ваше приложение, по крайней мере, будет работать при запуске. Что касается Intellisense, как я уже сказал в своем ответе, это будет зависеть от того, счастливый это день или нет. Обычно это работает, но …

2. Ha! Итак, закрытие и повторное открытие VS сделали это! Я уже собирался начать биться головой о клавиатуру. Большое спасибо! Думаю, в конце концов, это мой счастливый день 😉