2015-10-07 1 views
0

MVC4, Entity Framework 5, ASP.Net 4. Я пытаюсь сделать помощник бритвы для использования в нескольких областях. Это было задано несколько раз, но после реализации всех решений в Google проблема сохраняется.Как определить помощник бритвы для проекта C# MVC, чтобы найти пространство имен?

Intellisense распознает помощника, но на реальном сервере я не могу избежать ошибки компиляции «Невозможно найти имя типа или имени« MyHelpers »(вам не хватает директивы using или ссылки на сборку?)».

Вот что я сделал:

  • Defined @helper класс/App_Code
  • Defined @helper класс в/Views/Помощники
  • Добавлена ​​ссылка на MyHelper имен в
    < системы. web.webPages.razor > of Views/web.config
  • Добавлена ​​ссылка на пространство имен MyHelper в & ltsystem.web.webPages.razor > из MyArea/Просмотров/web.config
  • Добавлено все рекомендованные с помощью директивы сверху определения Helper
    • @using System.Web.Mvc;
    • @using System.Web.Mvc.Html;
    • @using System.Web.Mvc.Razor;
    • @using System.Text.RegularExpressions

После каждого шага, очистить, построить, перезапустить Visual Studio, а также переизданы. Но пространство имен помощников все еще не распознается в компиляторе Razor.

У кого-нибудь есть идеи?

ответ

0

лично я не люблю добавлять классы внутри App_Code папку, которая предназначена для Сайт проекта в старые времена.

Если ваше решение содержит только один проект MVC, вы можете просто создать папку под названием Helpers внутри проекта MVC и поместить в нее классы помощников.

FYI: Если вы разрабатываете большое приложение, вы хотите рассмотреть возможность создания отдельного проекта библиотеки классов для вспомогательных классов.

+0

Да, я согласен зарезервировать магические имена для папок, это не большой дизайн. У моего решения есть несколько проектов для разделения dll для разных баз данных. В какой-то момент я попытаюсь добавить отдельный проект для вспомогательных классов. –

2

Не используйте помощники вида (синтаксис @helper). Они оцениваются только во время выполнения и трудно, если не невозможно, проверить их правильно.

Вместо этого создайте статический класс, который расширяет HtmlHelper как так:

public static class HtmlHelperExtensions 
{ 
    public static IHtmlString Sample(this HtmlHelper htmlHelper) 
    { 
     ... 
    } 
} 

Если оставить вне объявления пространства имен, он становится глобальным, и вы можете ссылаться на него из любой точки мира, в том числе и взглядов. Это плохая идея для большинства вещей, но для расширений это нормально, если у вас не возникнут проблемы с использованием библиотек, которые предлагают подобные расширения с теми же именами методов.Если вы решите, чтобы пространство имён было безопасным, вам просто нужно добавить пространства имен в Web.config каталога вида, как вы это делали ранее.

+0

Хороший совет. Я попробую это и отправлю обратно. Благодарю. –

+0

Больше недействителен, RazorGenerator позволяет вам проверять время компиляции – Arjang

+1

@Arjang: это был тот случай, когда я тоже написал это. Однако RazorGenerator должен быть установлен и настроен (который не каждый будет делать или даже хочет делать), и вы получаете проверку времени компиляции только потому, что это буквально компилирует представления в код; вот что он делает. По-прежнему ужасная идея использовать '@ helper', даже с проверкой времени компиляции, и если только по той причине, что вы нарушаете основной принцип шаблона MVC. –

Смежные вопросы