MVC扩展方法错误

时间:2011-12-26 21:26:33

标签: asp.net-mvc-3 c#-4.0 extension-methods

您好我的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}))

我收到了这个错误:

  

&#39; System.Web.Mvc.HtmlHelper&#39;   不包含&#39; PageLinks&#39;的定义。没有扩展方法   &#39; PageLinks&#39;接受第一个类型的参数   &#39; System.Web.Mvc.HtmlHelper&#39;   可以找到(你错过了使用指令或程序集   引用?)

我在Views文件夹中的web.config中添加了命名空间:

<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 个答案:

答案 0 :(得分:4)

尝试添加

@using SportsStore.WebUI.HtmlHelpers;

到.cshtml文件的顶部

您的命名空间方法也应该正常工作,因此请尝试关闭服务器重建解决方案并再次运行

答案 1 :(得分:3)

您似乎已将命名空间引用添加到根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>

答案 2 :(得分:0)

看来你做的一切都是正确的。 在尝试使用Html帮助程序之前,您是否编译了Web项目?

答案 3 :(得分:0)

您需要在此行的代码上方添加List.cshtml

@model SportsStore.WebUI.Models.ProductsListViewModel