Почему мои расширения HtmlHelper не работают?
Я создаю веб-сайт ASP.Net MVC. Вместо того, чтобы иметь все в одном проекте, я решил разделить Web, Model и Controller на разные проекты в одном решении, которые ссылаются друг на друга.
Ссылка выглядит следующим образом:
Веб --- [ссылки] --- > Контроллер --- [ссылки] --- > Модель
Теперь я хотел добавить 2 класса к классу HtmlHelper - они называются "IncludeScript" и "IncludeStyle". Каждый из них принимает один строковый параметр и генерирует соответственно тег script или ссылку.
Я создал класс расширений, согласно документации в Интернете, и написал два метода и скомпилировал приложение.
Теперь, когда я перехожу на страницу 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);
Любые идеи, что здесь может быть неправильным?
Ответы
Ответ 1
Убедитесь, что пространство имен ваших расширений доступно для нашего представления. Вам также нужно это:
<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>
или это в разделе пространств имен веб-конфигураций:
<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>
Ответ 2
Если вы используете строго типизированные представления, а ваш метод расширения расширяется HtmlHelper<object>
, он не найдет расширение. Вам нужно создать общий расширитель для расширения HtmlHelper<T>
.
public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}
Затем вы увидите, как появился ваш метод расширения.
Я надеюсь, что это поможет.
Ответ 3
Обязательно укажите директиву импорта в пространство имен ваших методов расширений на странице.
В противном случае Visual Studio может увидеть, но ваш сайт не сможет.
Ответ 4
Вы уверены, что для компилятора установлена .NET Framework 3.5? Это случилось со мной, когда я непреднамеренно установил компилятор в .NET Framework 2.0
Ответ 5
В методе IncludeScript убедитесь, что вы расширяете System.Web.Mvc.HtmlHelper. Возможно, в другом пространстве имен есть HtmlHelper.