我该如何创建ReturnAlteredObject扩展方法呢
本文关键字:ReturnAlteredObject 扩展 方法 创建 何创建 | 更新日期: 2023-09-27 18:29:17
TL;DR:我想要一个可以扩展对象的扩展方法,可以像这样使用:
var OtherInstance = MyObject.Altered(new { Prop1 = "123", Prop6 = 4 });
我希望OtherInstance
的所有属性都与MyObject
相同,除了Prop1
和Prop6
。我不期望/不要求它进行深度克隆。
背景
我有一个MVC页面,允许用户搜索以显示数据列表。
我的页面模型有各种过滤器属性,还有一个页码。
在我的数据列表的底部,我有一个使用Html.ActionLink
创建的下一个页面的链接。我交了一份模型的副本,页码递增:
<%= Html.ActionLink("Next", "Index", new
{
Page = (Model.Page ?? -1) + 1,
Model.SortProperties,
Model.SortDescending,
Model.FilterId,
Model.FilterApprovalsLevelId,
Model.FilterStandardTypeId,
Model.FilterApprovalsBodyReferenceNumber,
Model.FilterCertificateOrApprovalNumber
}, new { id = "next-page" })%>
如果我在模型中添加新的过滤器,很容易忘记在这里添加属性,所以我希望能够克隆对象并流畅地更改1或2个属性,比如:
<%= Html.ActionLink("Next", "Index", Model.Altered(new
{
Page = (Model.Page ?? -1) + 1
}), new { id = "next-page" })%>
您可以使用RouteValueDictionary类来实现这一点。首先从您的模型中创建RouteValueDictionary的实例,然后将其添加到字典中。这里的其余属性是伪代码:
<%= Html.ActionLink("Next", "Index", new RouteValueDictionary(Model).AddAndReturn("Page", (Model.Page ?? -1) + 1), new { id = "next-page" })%>