MVC view не может найти мой метод расширения - PullRequest
11 голосов
/ 21 января 2010

Я создал метод расширения:

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, а не для меня?

Ответы [ 6 ]

14 голосов
/ 23 января 2010

Обратите внимание на разницу в случае вашего пространства имен при декларировании и при импорте.

namespace MyComp.Web.MVC.Html
{
} 

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
<add namespace="MyComp.Web.Mvc.Html"/>

Пространства имен чувствительны к регистру!

6 голосов
/ 18 августа 2011

Вы должны добавить пространство имен в web.config , но в пространство внутри папки Views

4 голосов
/ 21 января 2010

Попробуйте закрыть Visual Studio и снова открыть свое решение. Когда все начинает действовать странно, иногда это помогает.

1 голос
/ 05 марта 2014

Закрытие и повторное открытие Visual Studio сделали свое дело !!

1 голос
/ 22 января 2010
  1. VS intellisense автоматически завершает ваш метод расширения? Это автозаполнение стандартных методов помощников MVC? Если нет, то произошла ошибка компиляции представления. Убедитесь, что у вас есть правильное значение атрибута «Inherits» в теге Page в начале представления. Если вы используете строго типизированные представления, убедитесь, что «строгий тип» существует и компилируется.

  2. Определяете ли вы метод расширения в том же проекте, где определено представление? Если нет, вы должны добавить ссылку в проект MVC. Наконец, проверьте, находится ли сборка с методом расширения (MyComp.Web.Mvc.Html.dll?) В папке Bin приложения

  3. Попробуйте добавить объявление пространства имен в раздел pages / namespaces файла web.config, который находится в папке Views в проекте MVC (не в главном файле web.config проекта).

0 голосов
/ 21 января 2010

Одной из причин может быть то, что вы возвращаете MvcHtmlString, а не строку. Включите пространство имен для класса MvcHtmlString. Посмотрите, поможет ли это.

...