Ошибка метода расширения MVC - PullRequest
2 голосов
/ 27 декабря 2011

Привет, у меня есть метод расширения в моем классе PagingHelpers:

 namespace SportsStore.WebUI.HtmlHelpers
{
    public static class PagingHelpers
    {
        public static MvcHtmlString PageLinks(this HtmlHelper html,
                                               PagingInfo pagingInfo,
                                               Func<int, string> pageUrl)
        {
            StringBuilder result = new StringBuilder();
            for (int i = 1; i < pagingInfo.TotalPages; i++)
            {
                TagBuilder tag = new TagBuilder("a");
                tag.MergeAttribute("href", pageUrl(i));
                tag.InnerHtml = i.ToString();
                if (i == pagingInfo.CurrentPage)
                    tag.AddCssClass("selected");
                result.Append(tag.ToString());
            }

            return MvcHtmlString.Create(result.ToString());
        }
    }
}

здесь я вызываю метод расширения в List.cshtml:

@ Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new {page = x}))

И я получил эту ошибку:

'System.Web.Mvc.HtmlHelper' не содержит определения для PageLinks и метода расширения PageLinks принимает первый аргумент типа 'System.Web.Mvc.HtmlHelper' может быть найдено (вы пропустили директиву использования или сборку ссылка?)

Я добавил пространство имен в web.config внутри папки Views:

<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <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.Web.WebPages"/>
    <add namespace="SportsStore.WebUI.HtmlHelpers"/>**
  </namespaces>
</pages>

Пожалуйста, помогите мне, я не знаю, как я мог решить эту проблему

Ответы [ 4 ]

4 голосов
/ 27 декабря 2011

Попробуйте добавить

@using SportsStore.WebUI.HtmlHelpers;

в начало вашего .cshtml файла

ваш подход к пространству имен также должен работать, поэтому попытайтесь завершить работу сервера, перестройте ваше решение и снова запустите

3 голосов
/ 27 февраля 2012

Похоже, вы добавили ссылку на пространство имен в корневой файл web.config.

Если вы используете MVC3 с механизмом представления Razor, вам нужно добавить ссылку на пространство имен в Views \ web.configфайл.Тогда он будет глобально доступен для всех представлений в папке View.

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <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="SportsStore.WebUI.HtmlHelpers"/>
    </namespaces>
  </pages>
</system.web.webPages.razor>
0 голосов
/ 21 февраля 2014

Вам необходимо добавить в свой List.cshtml над кодом эту строку

@model SportsStore.WebUI.Models.ProductsListViewModel
0 голосов
/ 27 декабря 2011

Кажется, вы все сделали правильно.Скомпилировали ли вы свой веб-проект, прежде чем пытаться использовать Html helper?

...