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" })%>
答案 0 :(得分:0)
您可以使用RouteValueDictionary类来实现。首先从模型创建RouteValueDictionary的实例和实例,然后添加到字典中,这里的其余属性是伪代码:
<%= Html.ActionLink("Next", "Index", new RouteValueDictionary(Model).AddAndReturn("Page", (Model.Page ?? -1) + 1), new { id = "next-page" })%>