2012-11-23 36 views
5

我有必要使用ActionLink的鏈接到安編輯屏幕爲我的ViewModel A.MVC動態routeValues爲ActionLinks

A具有複合鍵,所以鏈接到它的路由值必須有3 pramaters,像這樣:

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

正如你可以看到,路由值包含了控制器的行動將接受的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

難道你不能只是作爲你的viewmodel屬性添加值? –

+0

它們是,但我只是想使用該函數來生成路由值,以防A的定義發生變化,就像我需要添加或刪除構成組合密鑰的Ids一樣。這樣,我只需要在一個地方更改參數 – getit

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

您現在可以重新使用它們,就像你喜歡的,只有曾經有改變他們在一個地方。

+0

非常好,謝謝 – getit