Вопрос

Я создаю веб-сайт ASP.Net MVC.Вместо того чтобы объединять все в одном проекте, я решил разделить Веб, модель и контроллер на разные проекты в одном решении, которые ссылаются друг на друга.

Ссылка выглядит следующим образом:

Веб---[ссылки]---> Контроллер ---[ссылки]---> Модель

Теперь я хотел добавить 2 пользовательских метода в класс HtmlHelper - они называются "IncludeScript" и "IncludeStyle".Каждый из них принимает один строковый параметр и генерирует скрипт или тег ссылки соответственно.

Я создал класс extender, согласно документации в Интернете, написал два метода и скомпилировал приложение.

Теперь, когда я захожу на страницу Public.Master (которая является моей главной главной страницей и одним из мест, где я намерен использовать эти методы), я могу ввести код, подобный приведенному ниже:

<%= Html.IncludeScript("\js\jquery.js") %>

IntelliSense подбирает метод IncludeScript и просто отлично показывает мне синтаксис.Так что я бы ожидал, что все должно сработать.

Но это не так.

Все компилируется, но как только я запускаю приложение, я получаю следующую ошибку во время выполнения из строки 14 Default.aspx.cs:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

Вот строка кода, в которой возникает ошибка:

httpHandler.ProcessRequest(HttpContext.Current);

Есть какие-нибудь идеи, что здесь может пойти не так?

Это было полезно?

Решение

Убедитесь, что пространство имен ваших расширений доступно нашему просмотру.На ваш взгляд, вам нужно либо это:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>

или это в разделе пространств имен вашей веб-конфигурации:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

Другие советы

Если вы используете строго типизированный просмотров, и ваш метод расширения расширяется HtmlHelper<object>, он не найдет расширение.Вам придется создать универсальный расширитель расширить HtmlHelper<T>.

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}

Затем вы увидите, что появится ваш метод расширителя.

Надеюсь, это поможет.

Обязательно наличие директивы импорта в пространстве имен методов расширений на вашей странице.

В противном случае Visual Studio сможет увидеть, но ваш веб-сайт не сможет.

Вы уверены, что компилятор настроен на .NET Framework 3.5?Это случилось со мной, когда я непреднамеренно установил компилятор на .NET Framework 2.0

В методе IncludeScript убедитесь, что вы расширяете System.Web.Mvc.HtmlHelper.Возможно, HtmlHelper существует в каком-то другом пространстве имен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top