c# - 请解释为什么这个 c# 扩展方法有效

标签 c# asp.net-mvc asp.net-mvc-2

我买了专业的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,但它仍然有效。不明白为什么,求助,谢谢。

最佳答案

扩展方法的第一个参数是调用它的对象。 (Html 在您的示例中)。

您可以阅读 more about extension methods on MSDN .

关于c# - 请解释为什么这个 c# 扩展方法有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492635/

相关文章:

C# 重构巨大的 switch 语句以使用 LINQ 进行排序

asp.net-mvc - ASP.NET MVC - 捕获所有路由和默认路由

c# - ASP.NET MVC 2 中具有约束的可选路由参数?

asp.net-mvc-2 - Html.EditorForModel 和显示格式

c# - 如何使用 Ajax.BeginForm 更新 div 并执行 javascript 函数?

javascript - asp.net mvc 脚本和样式引用

c# - 可枚举或列表的属性

c# - 将一个堆栈压入另一个堆栈

c# - 如何在 ServiceStack 中实现 JSONP 格式化程序

c# - 在 Roslyn 中获取 SymbolCallerInfo 的通用参数