MVC-представление не может найти мой метод расширения
Я создал метод расширения:
namespace MyComp.Web.MVC.Html
{
public static class LinkExtensions
{
public static MvcHtmlString ActionImageLink(this HtmlHelper htmlHelper, string linkText, string imageSource, string actionName)
{
...
}
}
}
Я ссылался на сборку из моего приложения mvc, и я попытался импортировать пространство имен в своем представлении:
<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
и я также добавил его в файл веб-конфигурации:
<pages>
<controls>
...
</controls>
<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="System.Linq"/>
<add namespace="System.Collections.Generic"/>
<add namespace="MyComp.Web.Mvc.Html"/>
</namespaces>
</pages>
В моем представлении, если я пытаюсь получить доступ к Html.ActionImageLink, я получаю сообщение об ошибке, говоря, что System.Web.Mvc.HtmlHelper не содержит определения для ActionImageLink, принимающего первый тип аргумента System.Web.Mvc.HtmlHelper. Я не вижу каких-либо методов расширения ActionLink для System.Web.Mvc.HtmlHelper, только для System.Web.Mvc.HtmlHelper, так как это работает для .NET Framework, а не для меня?
Ответы
Ответ 1
Обратите внимание на разницу в случае вашего пространства имен при объявлении и при импорте.
namespace MyComp.Web.MVC.Html
{
}
<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
<add namespace="MyComp.Web.Mvc.Html"/>
Пространства имен чувствительны к регистру!
Ответ 2
Вы должны добавить пространство имен в web.config, но внутри внутри Папка просмотра
Ответ 3
Попробуйте выключить Visual Studio и снова открыть свое решение. Когда все начинает действовать странно, иногда это помогает.
Ответ 4
-
Выполняет ли VS intellisense автообновление вашего метода расширения? Он автоматически заполняет стандартные методы помощников MVC? Если нет, то возникла ошибка компиляции вида. Убедитесь, что у вас есть правильное значение атрибута "Inherits" в теге страницы в начале представления. Если вы используете строго типизированные представления, убедитесь, что существует "сильный тип" и компилируется.
-
Определяется ли метод расширения в том же проекте, где определено представление? Если нет, вам нужно добавить ссылку в проект mvc. Наконец, проверьте, что сборка с методом расширения (MyComp.Web.Mvc.Html.dll?) Находится в папке Bin приложения
-
Попробуйте добавить объявление пространства имен в раздел страниц/пространств имен файла web.config, размещенного в папке "Представления" в проекте MVC (а не в основном файле проекта web.config).
Ответ 5
Закрыть и снова открыть Visual Studio, сделал трюк!
Ответ 6
Одна из причин может заключаться в том, что вы возвращаете MvcHtmlString, а не строку.
Включите пространство имен для класса MvcHtmlString. Посмотрите, помогает ли это.