asp.net mvc-请解释为什么这种c扩展方法有效
本文关键字:扩展 方法 有效 为什么 net mvc- 解释 asp | 更新日期: 2023-09-27 18:00:33
我买了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})
) %>
作者只传入了两个参数,HtmlHelper html丢失了,但它仍然有效。我不知道为什么,请帮忙,谢谢。
扩展方法的第一个参数是它所调用的对象。(在您的示例中为Html
)。
您可以在MSDN上阅读有关扩展方法的更多信息。
扩展方法与其他方法的不同之处在于它们是
- 声明为静态
- 第一个参数是调用它的对象
- 第一个参数的前缀是this关键字
可以在此处找到进一步的讨论:http://msdn.microsoft.com/en-us/library/bb383977.aspx
由于第一个参数被定义为<thisType name>与编译器通常知道的构建方法相反,编译器会自动为您处理第一个参数,因此您只需要担心后面的参数(如果有的话)。