【问题标题】:lambda expression meaninglambda表达式含义
【发布时间】:2011-12-07 21:49:04
【问题描述】:

我创建了一个 htmlhelper,其签名如下:

 public static MvcHtmlString PageLinks(this HtmlHelper html,
     PagingInfo pagingInfo,Func<int, string> pageUrl)

我看到它是这样传递的:

@Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new {page = x}))

但我不知道这是什么意思?

x => Url.Action("List", new {page = x})

请提出这个 lambda 表达式的含义

【问题讨论】:

    标签: c# asp.net-mvc-3 c#-4.0


    【解决方案1】:

    嗯,它是一个 lambda 表达式,它接受一个名为 x 的参数,并被隐式类型化为 int,它调用 Url.Action,其中一个参数为字符串 "List" 另一个参数为匿名类型它有一个属性page,参数值为x

    Url.Action 返回的值用作 lambda 表达式的返回值。

    这就是 lambda 表达式本身在语言结构方面的分解方式。如果您问的是它在行为方面的含义,那是另一回事 - 您需要查看自己的 PageLinks 方法,以及 Url.Action 的文档。

    【讨论】:

    • 补充一点,我认为您将从阅读委托中受益,因为 Func 是一个接受 int 作为输入并返回字符串的委托。在生成页面链接时,您将链接的创建委托给 Url.Action
    • @jon x 的值是多少?
    【解决方案2】:
    x => Url.Action("List", new {page = x})
    

    这是一个 (lambda) 函数,它给定一个 x(我们知道 x 必须是整数,因为签名是 Func&lt;int, string&gt;)返回一个 url(字符串)。 (从技术上讲,它是一个 lambda 表达式,但在这种特殊情况下会丢失差异)

    你可以这样使用它:string url = pageUrl(pageNumber);

    Url.Action 给出了动作 List 的 url,该动作有一个参数(类型为 int,名称可能为 page),该参数将填充 x 的值。该参数可能是必须返回的列表的页面。

    @Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new {page = x}))
    

    这将“返回”一个 html 字符串,其中包含指向我们之前计算的 url 的链接。 (可能是&lt;a href='url'&gt;&lt;/a&gt; 或类似的东西)啊...这是你的功能:-)

    (我认为您正在做这样的事情:ASP.NET MVC Paging, Preserving Current Query Parameters 与包含当前页面和总页面的 PagingInfo 类,对吧?)

    【讨论】:

    • 完全正确 :) 但我不确定这个过程。先叫什么。控制器、视图或助手?请建议。谢谢。
    • @DotnetSparrow (我希望我没有做错......自上次编写 MVC 以来已经有很多时间了)假设您有页面 MyPage (1)(其中 (1) 是传递给页)。 MyPage (1) 需要一个指向 MyPage (2) 的链接(例如表格的下 20 行)。顺序为:MyPage (1) 的控制器(例如MyController)调用MyPage (1) 的视图。在渲染 MyPage (1)(组成 html)期间,渲染器在调用助手的行并调用它。帮助程序创建到 MyPage (2) 的链接。页面的剩余部分是“准备好的”(html是组成的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多