2012-11-23 11 views
5

Mam potrzebę korzystania actionlink link do ekranu edycji ann dla mojego ViewModel A.MVC dynamiczne routeValues ​​dla ActionLinks

A ma klucz kompozytowy, więc do niej link, wartości trasa będzie mieć 3 pramaters coś takiego:

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

Jak widać, wartości trasy zawierają identyfikatory, że Akcja kontroler zaakceptuje.

Chcę być w stanie wygenerować wartości trasy z funkcji pomocniczych, takich jak to:

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

a następnie używać go w pomocnika actionlink, ale nie wiem jak przekazać ten wynik ActionHelper

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

Ale to musiałby działanie kontrolera przyjąć, że typ anonimowy zamiast listy 3 właściwości

widziałem poniższego linku, które łączą jest anonimowy, ale czy jest jakiś inny sposób na zrobienie tego? Merging anonymous types

+0

Nie możesz po prostu dodać wartości jako właściwości swojego modelu wyświetlania? –

+0

Są, ale chcę tylko użyć tej funkcji do wygenerowania wartości trasy w przypadku zmiany definicji A, tak jakbym potrzebował dodać lub usunąć identyfikatory składające się na klucz złożony. W ten sposób będę musiał zmienić tylko parametry w jednym miejscu. – getit

+0

Zobacz moją odpowiedź :) –

Odpowiedz

11

Co powiesz na coś takiego?

Model:

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

Widok:

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

Teraz można ponownie je tyle, ile chcesz i tylko kiedykolwiek trzeba zmienić je w jednym miejscu.

+0

Doskonale, dziękuję – getit

Powiązane problemy