#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 сделали это! Я уже собирался начать биться головой о клавиатуру. Большое спасибо! Думаю, в конце концов, это мой счастливый день 😉