准备一个在定义 lambda 之前引用 lambda 变量的对象
本文关键字:lambda 引用 变量 对象 定义 一个 | 更新日期: 2024-11-06 06:34:34
此帮助程序输出分页:
@Html.BootstrapPager(
int.Parse( Request.Params[ "page" ] ),
index => Url.Action(
"List",
"Test",
new {
page = index,
amount = 10,
sort = Request.Params[ "sort" ],
order = Request.Params[ "order" ]
}
),
Model.PaginationSet.TotalItemCount,
numberOfLinks: 10
)
BootstrapPager
函数的第二个参数是 lambda。index
变量引用输出页码的内部循环。
您能想到什么方法可以让我预先准备作为仍然引用 lambda index
变量的 Url.Action
的第 3 个参数传入的对象?
它可能看起来像这样:
object myActionData = new {
page = <index>, // I don't know how this line would work
amount = 10,
sort = Request.Params[ "sort" ],
order = Request.Params[ "order" ]
}
@Html.BootstrapPager(
int.Parse( Request.Params[ "page" ] ),
index => Url.Action(
"List",
"Test",
myActionData
),
Model.PaginationSet.TotalItemCount,
numberOfLinks: 10
)
这是不可能的,在这里有一个 lambda 的全部意义在于,在有效调用 lambda 之前没有设置index
。
你能做的最好的事情就是事先声明工厂函数。
@{
Func<int, object> myActionDataFactory = index => new {
page = index, // Here we use the parameter
amount = 10,
sort = Request.Params[ "sort" ],
order = Request.Params[ "order" ]
};
}
@Html.BootstrapPager(
int.Parse( Request.Params[ "page" ] ),
index => Url.Action(
"List",
"Test",
myActionDataFactory(index)
),
Model.PaginationSet.TotalItemCount,
numberOfLinks: 10
)
同样,您可以从 BootstrapPager 调用中删除整个 lambda。
@{
Func<int, sting> myUrlFactory = index => Url.Action(
"List",
"Test",
new {
page = index, // Here we use the parameter
amount = 10,
sort = Request.Params[ "sort" ],
order = Request.Params[ "order" ]
});
}
@Html.BootstrapPager(
int.Parse( Request.Params[ "page" ] ),
myUrlFactory,
Model.PaginationSet.TotalItemCount,
numberOfLinks: 10
)
您甚至可以将 Url 工厂声明为在代码中其他位置声明的(大概是静态的)类的方法。