2012-11-23 6 views
5

Ho la necessità di utilizzare ActionLink per collegare ann schermata di modifica per il mio ViewModel A.MVC routeValues ​​dinamici per ActionLinks

A ha una chiave composta, in modo da collegare ad esso, i valori del percorso dovrà avere 3 pramaters, come questo:

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

Come si può vedere, i valori del percorso contengono gli iD che l'azione di controllo accetterà.

Voglio essere in grado di generare i valori di percorso da una funzione di supporto, in questo modo:

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

E poi utilizzarlo in aiuto ActionLink, ma non so come passare quel risultato a l'ActionHelper

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

Ma sarebbe necessario l'azione di controllo ad accettare che tipo anonimo, invece di un elenco di 3 immobili

ho visto sul link qui sotto che si fondono s tipo anonimo, ma c'è un altro modo per farlo? Merging anonymous types

+0

Non puoi semplicemente aggiungere i valori come proprietà del tuo viewmodel? –

+0

Sono, ma voglio solo usare la funzione per generare i valori del percorso nel caso in cui la definizione di A cambi, come se dovessi aggiungere o rimuovere Id che compongono la chiave composta. In questo modo, dovrei solo cambiare i parametri in un posto – getit

+0

Vedere la mia risposta :) –

risposta

11

Che ne dici di qualcosa di simile?

Modello:

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

Vista:

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

È ora possibile riutilizzare loro quanto ti piace e hanno sempre e solo di cambiarle in un unico luogo.

+0

Eccellente, grazie – getit