2012-11-23 13 views
5

için ben 3 olmasıMVC dinamik routeValues ​​ActionLinks

A, rota değerleri bileşik anahtar, böylece ona bağlantı zorunda kalacak olan benim ViewModel A. için ann düzenleme ekranına bağlamak için ActionLink kullanmak için bir ihtiyaç var böyle pramaters: Gördüğünüz gibi

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

, rota değerleri kontrolör Eylem kabul edecek kimlikleri içerir.

Böyle bir yardımcı işlevinden rota değerleri üretmek mümkün istiyorum:

public static Object GetRouteValuesForA(A objectA) 
    { 
     return new 
     { 
      long Id1= objectA.Id1, 
      long Id2= objectA.Id2, 
      long Id3= objectA.Id3 
     }; 
    } 

Sonra ActionLink yardımcı kullanmak, ama bu sonuca geçmek nasıl bilmiyorum ActionHelper

objectA = new A(){Id1= objectA.Id1,Id2= objectA.Id2,Id3= objectA.Id3}; 
.... 
<%: Html.ActionLink("EDIT", "Action", "Controller", 
    new { area = "Admin", GetRouteValuesForA(objectA) })%> 

Ama bu birleştirme aşağıdaki bağlantıyı gördü yerine 3 özellikleri

listesinin isimsiz türünü kabul etmek denetleyicisi eylem gerekir anonim tip s, ancak bunu yapmak için başka bir yolu var mı? Merging anonymous types

+0

Eğer sadece ViewModel özellikleri olarak değerlerini eklenemez? –

+0

Bunlar, ama sadece ben eklemek veya kompozit anahtarı oluşturan kimlikleri kaldırmanız gerekiyorsa gibi durumda bir değişiklik tanımını rota değerlerini oluşturmak için işlevini kullanmak istiyorum. Bu şekilde, sadece, – getit

+0

tek bir yerde params değiştirmek zorunda kalacak teşekkür ederim –

cevap

11

Nasıl böyle bir şey?

Modeli:

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 
     }); 
    } 
} 

Görünüm: Beğendiğiniz ve sadece hiç bir yerde onları değiştirmek zorunda olduğu

<%: Html.ActionLink("EDIT", "Action", "Controller", Model.GetRouteValues())%> 

Artık kişiden daha fazla yeniden kullanabilirsiniz.

+0

Mükemmel benim cevap :) Bkz – getit