2011-12-26 14 views
2

こんにちは、私は私のPagingHelpersクラスの拡張メソッドを持っている:MVC拡張メソッドエラー

そして私Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new {page = x})) @:ここ

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()); 
     } 
    } 
} 

iはList.cshtmlで拡張メソッドを呼び出しますこのエラーが発生しました:

'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

てみてください、あなたの.cshtmlファイルの先頭に

@using SportsStore.WebUI.HtmlHelpers; 

を追加

あなたの名前空間のアプローチも同様に機能するはずですので、サーバーをシャットダウンしてソリューションを再構築してください。もう一度実行してください

+0

を追加する必要があります。ありがとうございました! – mrtn

+1

問題はありませんが、ネームスペースのアプローチもうまくいくはずですので、サーバーを撃墜してソリューションを再構築して再実行してください。おそらく@usingステートメントなしで動作します –

+0

views/web.configに名前空間を追加するだけで十分です。私は、プロジェクトがHTMLヘルパー拡張を使用しようとする前に再コンパイルされていなかったと考えています。 – santiagoIT

0

すべてを正しく行ったようです。 Htmlヘルパーを使用する前にWebプロジェクトをコンパイルしましたか?

+0

今後の参考のためにソリューションに追加しました。おそらく問題です –

3

ルートweb.configファイルに名前空間の参照が追加されているようです。

RazorビューエンジンでMVC3を使用している場合は、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

0

あなたはそれが動作します。この行にコードの上ごList.cshtmlに

@model SportsStore.WebUI.Models.ProductsListViewModel 
関連する問題