我需要使用ActionLink链接到我的ViewModel A的编辑屏幕。
A有一个复合键,所以要链接到它,路由值必须有3个pramaters,如下所示:
<%: Html.ActionLink("EDIT", "Action", "Controller",
new { area = "Admin", Id1= 1, Id2= 2, Id3= 3 })%>
如您所见,路由值包含控制器Action将接受的ID。
我希望能够从辅助函数生成路由值,如下所示:
public static Object GetRouteValuesForA(A objectA)
{
return new
{
long Id1= objectA.Id1,
long Id2= objectA.Id2,
long Id3= objectA.Id3
};
}
然后在ActionLink助手中使用它,但我不知道如何将该结果传递给ActionHelper
objectA = new A(){Id1= objectA.Id1,Id2= objectA.Id2,Id3= objectA.Id3};
....
<%: Html.ActionLink("EDIT", "Action", "Controller",
new { area = "Admin", GetRouteValuesForA(objectA) })%>
但这需要控制器操作接受匿名类型而不是3个属性的列表
我看到下面的链接合并了匿名类型,但有没有其他方法可以做到这一点? Merging anonymous types
答案 0 :(得分:11)
这样的事情怎么样?
<强>型号:强>
public class AViewModel
{
public string Id1 { get; set; }
public string Id2 { get; set; }
public string Id3 { get; set; }
public RouteValueDictionary GetRouteValues()
{
return new RouteValueDictionary( new {
Id1 = !String.IsNullOrEmpty(Id1) ? Id1 : String.Empty,
Id2 = !String.IsNullOrEmpty(Id2) ? Id2 : String.Empty,
Id3 = !String.IsNullOrEmpty(Id3) ? Id3 : String.Empty
});
}
}
查看:强>
<%: Html.ActionLink("EDIT", "Action", "Controller", Model.GetRouteValues())%>
您现在可以根据需要重复使用它们,只需在一个地方更改它们。