0

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" })%>
4

1 回答 1

0

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

<%= Html.ActionLink("Next", "Index", new RouteValueDictionary(Model).AddAndReturn("Page", (Model.Page ?? -1) + 1), new { id = "next-page" })%>
于 2013-08-28T15:57:18.927 回答