2011-12-26 94 views
2

嗨,我已经得到了扩展方法在我PagingHelpers类:MVC扩展方法错误

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' does not contain a definition for 'PageLinks' and no extension method 'PageLinks' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

我在视图文件夹中的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

尝试增加

@using SportsStore.WebUI.HtmlHelpers; 

您.cshtml文件的顶部

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

+0

它的工作原理。谢谢! – mrtn 2011-12-26 21:44:35

+1

没问题,你的命名空间方法应该也能正常工作,所以尝试击落服务器重新生成你的解决方案并再次运行,也许它不会使用@using语句 – 2011-12-26 21:46:22

+0

将命名空间添加到views/web.config应该足够。我怀疑该项目在尝试使用html助手扩展之前未被重新编译。 – santiagoIT 2011-12-26 21:55:24

0

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

+0

我将它添加到解决方案供将来参考,我相信它应该工作,但不重新启动服务器可能是问题 – 2011-12-26 22:00:47

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> 
+0

不知道为什么这不是标记为答案,这是这个问题所指的练习的正确方法。刚帮了我。 – BanksySan 2013-02-02 16:48:53

0

您需要在您的List.cshtml的代码添加这条线之上

@model SportsStore.WebUI.Models.ProductsListViewModel