【问题标题】:MVC dynamic routeValues for ActionLinksActionLinks 的 MVC 动态 routeValues
【发布时间】:2012-11-23 17:50:41
【问题描述】:

我需要使用 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

【问题讨论】:

  • 您不能将值添加为视图模型的属性吗?
  • 它们是,但我只想使用该函数生成路由值,以防 A 的定义发生更改,例如我需要添加或删除构成复合键的 Id。这样,我只需要在一个地方更改参数

标签: c# asp.net-mvc-3 anonymous-types routevalues


【解决方案1】:

这样的事情怎么样?

型号:

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

您现在可以随心所欲地重复使用它们,并且只需要在一个地方进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多