2012-12-19 19 views
5

Sono curioso di sapere come funziona. In MVC puoi chiamare View() e passare un modello come parametro, ma RedirectToAction (una delle sue incarnazioni almeno) prende un oggetto 'routeValues', che sembra essere la corrispondenza più vicina.Passare un modello in RedirectToAction()

Se il modello è passato in questo parametro, quel tipo di modello sarà disponibile nel metodo di azione successivo? O ci sono dei caveat implicati che potrebbero impedire una traduzione accurata in alcune circostanze?

+1

Stai parlando di un _model_ effettivo o di un _object_ _model_? – OakNinja

+0

@ OakNinja-- Non sono al 100% qual è la differenza tra i due a cui ti riferisci? Quando dico 'modello' intendo l'oggetto taggato come '@ model' in Razor che è disponibile per una vista e passato ad esso dal controller. So che è possibile utilizzare TempData o un ViewBag per inserire un modello nella memoria temporanea durante il reindirizzamento; qualcuno dovrebbe sapere perché non puoi passarne uno come parametro durante il reindirizzamento? Il metodo View() ha un sovraccarico che ti permette di ... chiedermi perché non puoi fare lo stesso con un reindirizzamento. – larryq

+1

L'oggetto _ passato in una vista fortemente tipizzata è di tipo _model_. In effetti, la linea @model nella vista indica la vista che verrà passato un oggetto che ha le proprietà di un modello specifico. Reso più chiaro? In caso contrario, ti darò una risposta più ampia come risposta! – OakNinja

risposta

5

Se è necessario passare in qualche-cosa oggetti complessi ad un'azione dopo un redirect, probabilmente avrete bisogno di utilizzare una sessione o TempData:

Da "What is ASP.NET MVC TempData"

ASP.NET Il dizionario MVC TempData viene utilizzato per condividere i dati tra le azioni del controller . Il valore di TempData persiste fino a quando non viene letto o fino a tempi di sessione dell'utente corrente fuori

Per impostazione predefinita TempData utilizza una sessione a persistere le informazioni, tuttavia, come con gran parte della MVC, questo è un punto di estensibilità, in cui è possibile collegare un Cookie-based provider se si preferisce.

+0

Sì, di solito schiaffo l'oggetto nel dizionario TempData. L'azione a cui hai effettuato il reindirizzamento dovrebbe quindi controllare TempData per vedere se ha un modello disponibile per questo. – kdawg

2

Redirect... I metodi causano un viaggio lato client e viceversa, quindi - no, il modello non sarà disponibile.

4

Non è possibile passare un oggetto modello ma è possibile passare singole proprietà che verranno mappate a un modello nell'azione a cui si reindirizza.

Ciò funziona creando l'URL da reindirizzare all'utilizzo delle proprietà e il raccoglitore modello nell'azione di ricezione.

0

Credo che questo sia ciò che si vuole:

  1. Salvare il modello in un TempData

     RequestModel rq = new RequestModel() 
         ....assign something to your model.. 
         TempData["request"] = rq; 
    
         return Redirect("RequestAcknowledgement"); 
    
  2. Ora creare un Risultato Azione per la vista si reindirizzano da e per passare i vostri TempData indietro a un modello. Quindi restituire il modello a una vista.

    public ActionResult RequestAcknowledgement() 
        { 
         RequestsModel request = (RequestsModel)TempData["request"]; 
    
         return View(request); 
        } 
    
Problemi correlati