我该如何创建ReturnAlteredObject扩展方法呢

本文关键字:ReturnAlteredObject 扩展 方法 创建 何创建 | 更新日期: 2023-09-27 18:29:17

TL;DR:我想要一个可以扩展对象的扩展方法,可以像这样使用:

var OtherInstance = MyObject.Altered(new { Prop1 = "123", Prop6 = 4 });

我希望OtherInstance的所有属性都与MyObject相同,除了Prop1Prop6。我不期望/不要求它进行深度克隆。


背景

我有一个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" })%>

我该如何创建ReturnAlteredObject扩展方法呢

您可以使用RouteValueDictionary类来实现这一点。首先从您的模型中创建RouteValueDictionary的实例,然后将其添加到字典中。这里的其余属性是伪代码:

<%= Html.ActionLink("Next", "Index", new RouteValueDictionary(Model).AddAndReturn("Page", (Model.Page ?? -1) + 1), new { id = "next-page" })%>
相关文章:
  • 没有找到相关文章