2012-11-23 9 views
5

Ich habe eine Notwendigkeit Action zu verwenden, um ann BearbeitungsbildschirmMVC dynamische Routevalues ​​für ActionLinks

A hat einen zusammengesetzten Schlüssel, für meine Ansichtsmodell A. zu verknüpfen, so, um es zu verbinden, müssen die Route Werte 3 haben pramaters, wie folgt aus:

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

wie Sie die IDs sehen können, enthalten die Routenwerte, die der Controller Aktion akzeptieren.

Ich mag die Route Wert aus einer Hilfsfunktion, wie dies in die Lage sein zu generieren:

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

Und es dann in der Action Helfer verwenden, aber ich weiß nicht, wie dieses Ergebnis zu übergeben die ActionHelper

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

Aber das würde die Controller-Aktion müssen diese anonymen Typ statt einer Liste von drei Eigenschaften

ich den Link unten sah akzeptieren, die fusionieren s anonymer Typ, aber gibt es einen anderen Weg, dies zu tun? Merging anonymous types

+0

Können Sie nicht einfach die Werte als Eigenschaften Ihres Viewmodels hinzufügen? –

+0

Sie sind, aber ich möchte nur die Funktion verwenden, um die Route Werte für den Fall zu generieren, dass die Definition von A ändert, als ob ich IDs hinzufügen oder entfernen muss, die den zusammengesetzten Schlüssel bilden. Auf diese Weise würde ich nur die Parameter an einem Ort ändern müssen – getit

+0

Siehe meine Antwort :) –

Antwort

11

Wie wäre es mit so etwas?

Modell:

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

Ausblick:

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

können Sie jetzt wieder zu verwenden, so viel wie Sie und nur sie jemals an einem Ort zu ändern.

+0

Ausgezeichnet, danke – getit