2008-11-24 26 views
7

Quiero redirigir de una acción en un controlador a una acción en un segundo controlador. Normalmente usaría RedirectToAction ("actionName", "controllerName", objetos); El método quiero redirigir a tiene dos sobrecargas:Redirigir a la acción en otro controlador

  • Uno de HttpVerbs.Get que se utiliza para la vinculación directa
  • Uno de HttpVerbs.Post aceptar los tipos de referencia que se llenan a través modelbinding

Cuando hago mi redirección con el método RedirectToAction, me redireccionan al método GET de forma predeterminada, que por supuesto no coincide con mis parámetros.
¿Cómo puedo asegurarme de que redirija a la sobrecarga de la acción correcta?

--EDIT--
A petición algunos detalles más específicos:
La acción Quiero redirigir a llena el ViewData en base a los parámetros y luego llama a la visión correcta.

public ActionResult OverView(SearchBag searchBag, IngredientBag ingredientBag) { 

Tiene una segunda versión para Obtiene así que puede trabajar por GET también:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult OverView(int colorId, string paintCode, string name, int formulaId) { 
    return OverView(new SearchBag() 
     { ColorId = colorId, PaintCode = paintCode, ColorName = name, FormulaId = formulaId } 
      , formulaViewData.IngredientBag); 
} 

El que estoy llamando ahora está en un controlador diferente. Hace algunos cálculos previos, obtiene la información necesaria y luego hace exactamente lo mismo que las acciones anteriores. Podría replicar el código de la primera acción, pero prefiero llamar a esa acción.

[AcceptVerbs(HttpVerbs.Post)] 
public RedirectToRouteResult ReCalculate(SearchBag searchBag, IngredientBag ingredientBag) { 

que podría crear una instancia local temporal de ese lado del controlador, pero me di cuenta de que no tiene la correcta HttpContext y no choca con los métodos de inicialización.

+0

Puede poner verbos múltiples en una sola acción como esta [AcceptVerbs (HttpVerbs.Post | HttpVerbs.Get)] –

+0

¿Está intentando RedirectToAction desde la acción ReCalculate a la acción OverView? –

+0

sí. Y como he recuperado todos mis objetos y los he recalculado en ReCalculate, no quiero tener que volver a hacerlo en mi acción de Resumen –

Respuesta

3

No puede utilizar RedirectToAction (o cualquier otra cosa) para hacer que el navegador para redirigir con un HTTP POST. Es posible que pueda hackearlo con JavaScript, pero sería feo.

Si puede proporcionar algunos detalles más sobre la acción de destino que desea redirigir al usuario a que podamos ofrecer mejores respuestas para usted. Actualice su pregunta con la firma de la acción de destino y los detalles sobre lo que desea proporcionar como valores de parámetro para que las personas puedan proporcionar una orientación decente.

Supongo que lo que quiere hacer es almacenar algunos datos en TempData, llamar a RedirectToAction, cargar desde TempData en el controlador/acción y proceso de destino.

Para obtener más información sobre TempData ver estas preguntas; http://www.google.com/search?q=tempdata+site%3Astackoverflow.com

+0

La acción a la que quiero redirigir llena mi viewData con el contenet necesario (elementos del cuadro de lista y demás) y luego llama a la vista. La segunda acción (la que estoy llamando ahora) primero hace algunos cálculos específicos y luego hace exactamente las mismas cosas que la primera. Actualizaré mi OP –

2

Puesto que usted ha llenado su objeto, es posible considerar regresar misma vista desde la primera acción en lugar de redirigir.

Cuestiones relacionadas