2016-06-23 2 views
2

Ich habe einen Filter Typ:Redirect zum Handeln und Weitergabe Referenzart

public class Filter 
{ 
    public int FilterId { get; set; } 
    public ICollection<int> ModuleIds { get; set; } 
} 

ich Aktion umleiten müssen und instanse dieser Art passieren:

public ActionResult Navigate 
{ 
    var filter = new Filter() 
    { 
     FilterId = 5, 
     ModuleIds = new List<int>() { 6 }; 
    } 

    return RedirectToAction("list", "user", filter); 
} 

Hier ist die Zielaktion:

public ActionResult List(Filter filter) 
{ 
    var filterId = filter.FilterId; // = 5 
    // but filter.ModuleIds.Count = 0 
} 

In einem Ergebnis wurde ich leer . Es gibt also nur ein Problem mit dem Referenztyp. Wie kann ich filter mit allen Referenzeigenschaften ohne TempData übergeben?

Auch habe ich versucht,

return RedirectToAction("list", "user", new RouteValueDictionary(filter); 

und

return RedirectToAction"list", "user", new { filter = filter}); 
+3

Sie können Referenztypen nicht übergeben. Eine Problemumgehung wäre das Speichern des Wertes in Session/TempData oder das Serialisieren des 'filter' -Objekts nach json, was es zu einem Werttyp machen würde. –

Antwort

3

Sie können nicht passieren Typen Referenz aber keine Ergebnisse zu verwenden. Der Grund dafür ist, dass RedirectToAction die Daten nicht serialisiert, sondern einfach über die Eigenschaften im Objekt routes values ​​iteriert und eine Abfragezeichenfolge erstellt, deren Schlüssel die Eigenschaftsnamen und die Werte die Zeichenfolgendarstellung der Eigenschaftswerte sind. Wenn Sie die Url ändern möchten, dann ist die Verwendung von TempData wahrscheinlich der einfachste Weg, dies zu tun.

+0

Danke für die Antwort. Ich werde Session verwenden, wenn es keine Möglichkeiten gibt, mein Objekt zu übergeben – Marusyk