私は ASP.Net MVC を学んでおり、この本 Pro ASP.Net MVC4 by Adam Freeman を読んでいます。理解できないコードがあります。
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"); // Construct an <a> tag
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());
}
ユニットテストプロジェクトでは、コードが表示されます:
Func<int, string> pageUrlDelegate = i => "Page" + i;
MvcHtmlString result = myHelper.PageLinks(pagingInfo, pageUrlDelegate)
デリゲートを PageLinks メソッドに渡していることを理解しています。
しかし、ビューまたはコントローラーでは、そのようなラムダ式は見られませんでした
Func<int, string> pageUrlDelegate = i => "Page" + i;
ビューコードは次のとおりです。
<div class="pager">
@Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new {page = x}))
</div>
実行すると、ページング用に次のような HTML が生成されるのはなぜですか。
<div class="pager">
<a class="selected" href="/">1</a><a href="/**Page2**">2</a>
<a href="/Page3">3</a>
</div>
ビューのようにデリゲートを渡していないときに、メソッド拡張で「Page{number}」を生成するにはどうすればよいですか。
Func<int, string> pageUrlDelegate = i => "Page" + i;
ご指導ありがとうございました。よろしく、ハリー