2010-02-24 16 views
32

Me dieron una vista List.aspx que está obligado a la clase Kindergarten.NET MVC: ¿Llamar a RedirectToAction para pasar un modelo?

En el controlador:

public ActionResult List(int Id) 
{ 
    Kindergarten k = (from k1 in _kindergartensRepository.Kindergartens 
        where k1.Id == Id 
        select k1).First(); 

    return View(k); 
} 

que funciona.

Pero esto no

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(...) 
{ 
    //... 
    Kindergarten k = ... 
    return RedirectToAction("List", k); 
} 

Cómo debería redirigir a la vista de lista, pasando k como el modelo?

Gracias!

Respuesta

27

creo que sólo tiene que llamar a la vista como

RedirectToAction retorno ("Lista", nueva {id});

con id que necesita para poblar el Kindergarten.

18

No estoy seguro de que quiera llamar al RedirectToAction porque eso simplemente hará que k se establezca de nuevo.

Creo que desea llamar al View y pasar el nombre de la vista y su modelo.

return View("List", k); 
+0

Tienes razón (_ _;) Gracias! – Aximili

+0

Oh, pero ¿y si la vista está en otro controlador? – Aximili

+0

Cuando busca una Vista, verificará la carpeta View \ Controller \, si no la encuentra allí, comprueba la carpeta Shared. Si desea acceder a una vista en varios controladores, colóquelo en la carpeta Compartido. – Brandon

55

No creo que exista ModelBinding al usar RedirectToAction. Sin embargo, sus mejores opciones es utilizar la colección TempData para almacenar el objeto y recuperarlo en la siguiente acción.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(...) 
{ 
    //... 
    Kindergarten k = ... 
    TempData["KG"] = k; 
    return RedirectToAction("List"); 
} 

En su lista de acciones

public ActionResult List() 
{ 

    Kindergarten k = (Kindergarten)TempData["KG"]; 
    // I assume you need to do some stuff here with the object, 
    // otherwise this action would be a waste as you can do this in the Add Action 
    return View(k); 
} 

Nota: Colección TempData sólo tiene un único objeto para redirección posterior. Una vez que realice un redireccionamiento desde Agregar, TempData ["KG"] será nulo (a menos que lo vuelva a llenar)

+1

no debería usar MVC de esta manera. – eaglestorm

+0

¿Qué hay de malo con el uso de MVC como este? – Omar

+2

Implica que hay mucha lógica en sus acciones. La lógica empresarial debe estar en una capa separada (servicios) y su acción debe llamar a esta lógica y luego redireccionar a la vista apropiada. No debe colocarse en una posición en la que deba hacer lo anterior si su aplicación está bien diseñada. – eaglestorm

1

Como dijo Brandon, probablemente desee usar return View("List", Id), pero el problema que está teniendo es que usted ' re pasando k, su modelo, a un método que acepta un int como su parámetro.

Piense en RedirectToAction como una llamada a un método.

Cuestiones relacionadas