我正在学习 ASP.Net MVC 并阅读了 Adam Freeman 的这本书 Pro ASP.Net MVC4,有一些我不明白的代码。
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 方法。
但是在视图或控制器中,我没有看到任何这样的 lambda 表达式
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;
谢谢你的指导。问候,哈利