2014-08-27 20 views
5

Ich habe das getan.Wie übergebe ich ein Objekt als versteckten Parameter mit RedirectToAction?

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    return RedirectToAction("NewAction", "NewController", new System.Web.Routing.RouteValueDictionary(entity)); 
} 

Aktion die

public ActionResult NewAction(SomeModel smodel) 
{ 
    ------- 
    ------- 
} 

Dies funktioniert gut genannt wurde, aber ich kann alle aufgestellten param Werte auf Browser-Adressleiste sehen, wie kann ich diese Abfragezeichen param Werte in Browser verstecken.

http://localhost:51545/NewController/NewAction?SurveyID=13&CatID=1&PrimaryLang=1&SurveryName=Test%20Survery&EnableMultiLang=False&IsActive=False 

Jede Hilfe wird geschätzt.

Antwort

8

In Ihrem Fall statt RouteValueDictionary der Verwendung und Passing-Modell von Abfragezeichenfolgeflag versuchen TempData (denn wenn wir RedirectToAction verwenden es wird eine neue HTTP-Anforderung und Objekt Routen machen wird in URL angezeigt, so ist es nicht ein guter Ansatz in sensiblen Daten anzuzeigen url).

Verwendung TempData wie folgt: -

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    TempData["entity"] = entity; //put it inside TempData here 
    return RedirectToAction("NewAction", "NewController"); 
} 

public ActionResult NewAction() 
{ 
    SomeModel smodel = new SomeModel(); 
    if(TempData["entity"] != null){ 
    smodel = (SomeModel)TempData["entity"]; //retrieve TempData values here 
    } 
    ------- 
    ------- 
} 

Der Vorteil TempData hier ist, dass es seinen Wert für eine Umleitung beibehalten wird, und darüber hinaus wird Modell privat an einen anderen Controller-Aktion transportiert werden, und wenn Sie Daten, die aus TempData seine Daten werden automatisch entsorgt und wenn Sie den Wert TempData nach dem Lesen beibehalten möchten, verwenden Sie TempData.keep("entity").


ODER

Wenn Ihre Ansichten in einem gleichen Controller sind dann dies eine einfache Lösung für Ihr Problem:

public ActionResult GetInfo(SomeModel entity) 
{ 
    ---- 
    return NewAction(entity); 
} 

public ActionResult NewAction(SomeModel smodel) 
{ 
    ------- 
    ------- 
    return View("NewAction",smodel) 
} 

Wie richtig kommentiert von @ Chips_100 so im hier ua: - Die Die erste Lösung führt eine echte Umleitung (302) durch, die die URL im Browser des Benutzers aktualisiert. Die zweite Lösung liefert das gewünschte Ergebnis, während die ursprüngliche URL in der Adressleiste beibehalten wird.

+0

Das sieht übermäßig kompliziert aus. Gibt es keine Möglichkeit, eine serverseitige Umleitung durchzuführen? –

+0

@ PhilipPittle..was kompliziert .. nur Sie haben das Modell in tempdata und dann tippen Sie tempdata in das Modell auf die gewünschte Aktion .. was ist kompliziert darin? –

+0

@Exception: Danke, es funktioniert @ Philip Pittle: Einige effizientere Vorschlag, wenn irgendwelche geschätzt werden. –

Verwandte Themen