2012-03-21 11 views
3

私はSteven Sanderson/Adum Freeman Pro ASP .Net MVCの参考書に詰め込まれています。私は185ページに、HTMLヘルパーを使用してリンクのページの数が多い。HTMLヘルパークラスメソッドが動作しない

Compiler Error Message: CS1973: 'System.Web.Mvc.HtmlHelper' has no applicable method named 'PageLinks' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax

:私はこのエラーを取得し、ブラウザでコードを実行すると、まだ同じ問題(リンクに) MVC extension method error

を持つこのリファレンスブックで自分の問題に対処するこのサイトのヘルプを発見し、すべてのステップを歩い

コードがうまく構築されますが、他のクラスを開いてヘルパーメソッドにこのコード行を編集すると、上記と同じエラーが発生します。

@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 results = 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"); 
       results.Append(tag.ToString()); 
      } 
      return MvcHtmlString.Create(results.ToString()); 
     } 
    } 
} 

マイビュー:

@{ 
    ViewBag.Title = "Products"; 
} 

@foreach (var p in Model.Products) { 
    <div class="item"> 
     <h3>@p.Name</h3> 
     @p.Description 
     <h4>@p.Price.ToString("c")</h4> 
    </div> 
} 

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

のWeb.config

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

答えて

3

あなたが拡張メソッドに動的な値を渡しています。 (Model.PagingInfoとIntellisenseの上にカーソルを置くと、タイプが動的であることがわかるはずです。つまり、実行時まで型がわからないということです)。

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

次の2つの他の方法でこれを修正することができます:

エラーが示すように、拡張メソッドを使用してそれを呼び出すことはありません:

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

ORビューはモデルがために何が起こっているか知っている作ることができますこれをあなたの一番上に置くことで、ダイナミックを使用しないようにするあなたはビューの下web.cofigにこの行を追加する必要があります

@model PagingInfo 
+0

これは働いていた... @ Html.PageLinks((SportsStore.WebUI.Models.PagingInfo)モデルをメインではないフォルダ.PagingInfo、x => Url.Action( "List"、new {page = x})) – Shawn

+0

私は、あなたの例を作った@ using SportsStore.WebUI.Modelsを追加しました。ご協力いただきありがとうございます! – Shawn

+0

質問および/または回答に関連情報を編集してください。新しい回答があればそれを正当なものとして投稿してください。質問/回答のコメントセクションは、関係する人々に役立つかもしれないが、長い議論のためのものではなく、間違い、詳細などのような手元の実際の投稿に関する関連情報のみを対象としています。このディスカッションを続行する必要がある場合は、代わりにチャットルームに持ち込むことを検討してください。 –

0

Rビューは1

<add namespace="YourProjectName.HtmlHelpers"/> 
関連する問題