2011-12-26 189 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