gpt4 book ai didi

c# - 无法理解此 Func 应如何与 Url.Action 委托(delegate)一起使用

转载 作者:行者123 更新时间:2023-11-30 20:52:24 26 4
gpt4 key购买 nike

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

在我看来,我想再添加 2 个属性(因此我向 Func 委托(delegate)添加了更多参数...):

@Html.PageLinks(Model.PagingInfo, x => Url.Action("List",
new { page = x,
sort = Request.QueryString["sort"],
desc = Request.QueryString["desc"] }))

但是当我再添加 2 个属性时它不起作用...我在这里不明白什么?

我有以下 html 帮助器:

public static MvcHtmlString PageLinks(this HtmlHelper html,
PagingInfo pagingInfo, Func<int, string, string, string> pageUrl)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= pagingInfo.TotalPages; i++)
{
TagBuilder liTag = new TagBuilder("li");
TagBuilder aTag = new TagBuilder("a");

aTag.MergeAttribute("href", pageUrl(i,
pagingInfo.Sort, pagingInfo.Desc.ToString())); // pageUrl delegate is here helloooo
aTag.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
liTag.AddCssClass("active");

liTag.InnerHtml = aTag.ToString();

result.Append(liTag.ToString());
}
return MvcHtmlString.Create(result.ToString());
}

P.S 我的 Controller 看起来像这样:

public ViewResult List(int page = 1, string sort = "Name", bool desc = false)
{...

最佳答案

x => Url.Action("List",
new { page = x,
sort = Request.QueryString["sort"],
desc = Request.QueryString["desc"] })

仍然是一个 lambda 表达式,表示需要 一个 参数的方法。在方法主体中创建具有三个属性的匿名对象这一事实无关紧要。

你想把它改成

(x, y, z) => Url.Action("List",
new { page = x,
sort = y,
desc = z }))

这样当你调用它时

pageUrl(i, pagingInfo.Sort, pagingInfo.Desc.ToString())

所有三个(ipagingInfo.SortpagingInfo.Desc.ToString())将被连续的参数(xyz)。为了清楚起见,我什至建议重命名:

(pageNumber, sortOrder, descending) => Url.Action("List",
new { page = pageNumber, sort = sortOrder, desc = descending }))

关于c# - 无法理解此 Func<in T, out T> 应如何与 Url.Action 委托(delegate)一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20954933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com