我需要使用ActionLink链接到ViewModel A的ann编辑屏幕。

一个具有复合键,因此要链接到它,路由值将必须具有3个参数,如下所示:

<%: Html.ActionLink("EDIT", "Action", "Controller",
    new { area = "Admin", Id1= 1, Id2= 2, Id3= 3 })%>

如您所见,路由值包含 Controller 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) })%>

但这需要 Controller Action 来接受该匿名类型,而不是3个属性的列表

我看到了合并匿名类型的以下链接,但是还有其他方法可以做到这一点吗?
Merging anonymous types

最佳答案

这样的事情怎么样?

型号:

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())%>

现在,您可以随意重用它们,而只需要在一个地方进行更改即可。

关于c# - ActionLink的MVC动态routeValues,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13533778/

10-12 18:44