我买了pro asp.net mvc2框架书。我在第122页遇到了困难。我无法理解为什么会这样。
我已经通过电子邮件发送了作者,但还没有收到任何回复。这是代码,有人可以向我解释它为什么有效。
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.AppendLine(tag.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
}
这个PageLinks辅助方法需要3个参数,但在本书后面,当作者调用它时,
<%: Html.PageLinks(
new PagingInfo { CurrentPage = 2, TotalItems = 28, ItemsPerPage = 10 },
i => Url.Action("List", new{ page = i})
) %>
作者只传递了2个参数,HtmlHelper html丢失了,但是它有效。我无法弄清楚原因,请帮助,谢谢。
答案 0 :(得分:7)
扩展方法的第一个参数是它被调用的对象。 (示例中为Html
)。
答案 1 :(得分:1)
扩展方法与其他方法的不同之处在于它们是
可以在此处找到进一步的讨论:http://msdn.microsoft.com/en-us/library/bb383977.aspx
答案 2 :(得分:0)
由于第一个参数定义为&lt; 此类型名称&gt;与通常情况相反,编译器知道以自动处理第一个参数的方式构建它,因此您只需要担心这些参数,如果有的话。