2012-12-19 13 views
5

Ciekawi mnie, jak to działa. W MVC możesz wywołać View() i przekazać model jako parametr, ale RedirectToAction (przynajmniej jedna z jego inkarnacji) przyjmuje obiekt "routeValues", który wydaje się być najbliższym dopasowaniem.Przekazywanie modelu w RedirectToAction()

Jeśli model zostanie przekazany w tym parametrze, czy ten typ modelu będzie dostępny w kolejnej metodzie działania? Czy są jakieś zastrzeżenia, które mogą uniemożliwić dokładne tłumaczenie w pewnych okolicznościach?

+1

Mówisz o rzeczywistej _model_ lub _object_ _model_? – OakNinja

+0

@ OakNinja-- Nie jestem w 100% czym jest różnica między tymi dwoma, do których się odnosisz? Kiedy mówię "model" mam na myśli obiekt oznaczony jako "@ model" w Razorze, który jest dostępny dla widoku i przekazywany do niego z kontrolera. Wiem, że można użyć TempData lub ViewBag do wypychania modelu do magazynu tymczasowego podczas przekierowywania; Czy ktokolwiek wie, dlaczego nie możesz przekazać jednego jako parametru podczas przekierowania? Metoda View() ma przeciążenie, które pozwala ... zastanawiać się, dlaczego nie można zrobić tego samego w przekierowaniu. – larryq

+1

Parametr _object_ przekazany do mocno napisanego widoku ma typ _model_. W efekcie linia @model w widoku mówi widokowi, że zostanie przekazany obiekt, który ma właściwości określonego modelu. Czy było wyraźniej? Jeśli nie, udzielę ci szerszej odpowiedzi jako odpowiedzi! – OakNinja

Odpowiedz

5

Jeśli trzeba przejść w jakiś kompleks obiektów, co do działania po przekierowaniu, prawdopodobnie chcesz użyć sesji lub TempData:

Od „What is ASP.NET MVC TempData

ASP.NET Słownik MVC TempData służy do udostępniania danych między działaniami kontrolera . Wartość TempData nie ustąpi, dopóki nie jest odczytywana lub aż do czasów sesji bieżącego użytkownika z

Domyślnie TempData używa sesji utrzymują informacje, jednak, jak wiele z MVC, jest to punkt rozciągliwość, gdzie możesz podłączyć Cookie-based provider, jeśli wolisz.

+0

Tak, zwykle uderzam obiekt w słownik TempData. Akcja, do której przekierowałeś, powinna następnie sprawdzić TempData, aby sprawdzić, czy ma dostępny model. – kdawg

2

Redirect... metody powodują podróż po stronie klienta, więc - nie, model nie będzie dostępny.

4

Nie można przekazać obiektu modelu, ale można przekazać poszczególne właściwości, które zostaną odwzorowane na model w akcjach, do których następuje przekierowanie.

To działa, budując adres URL, aby przekierować do korzystania z właściwości i segregatora modelu w akcji odbiorczej.

0

myślę, że to jest to, co chcesz:

  1. Zapisz swój model w TempData

     RequestModel rq = new RequestModel() 
         ....assign something to your model.. 
         TempData["request"] = rq; 
    
         return Redirect("RequestAcknowledgement"); 
    
  2. Teraz utwórz Wynik działania na widoku, który przekierowanie do i zdać TempData powrotem do modelu. Następnie zwróć model do widoku.

    public ActionResult RequestAcknowledgement() 
        { 
         RequestsModel request = (RequestsModel)TempData["request"]; 
    
         return View(request); 
        } 
    
Powiązane problemy