ASP.Net MVC redirigir a una vista diferente

89

¿Es posible redirigir a una vista diferente desde un controlador?

Por ejemplo, todos mis controladores heredan de un controlador personalizado que tiene un constructor que quiero redirigir a una vista diferente si no se cumplen ciertos criterios. Espero que tenga sentido.

Gavin
fuente

Respuestas:

147

Puede usar el RedirectToAction()método, luego la acción a la que redirige puede devolver una Vista. La forma más sencilla de hacerlo es:

return RedirectToAction("Index", model);

Luego, en su método Index, devuelva la vista que desee.

John Sheehan
fuente
1
Si lo hice de esta manera, ¿cómo devuelvo una vista específica de una acción de controlador?
Gavin
18
return View ("ViewName");
Craig Stuntz
11
@Craig: la vista de retorno no realiza una redirección y la URL termina siendo la misma que antes. Por lo tanto, si se encuentra en "/ edit / MyItem", al regresar View ("showitem") obtendrá la vista "showitem" con la URL "/ edit /". Dependiendo de su situación, esto puede funcionar, pero no siempre.
jeffreypriebe
5
@jeffrey, eso son dos pasos separados: Redirigir en la primera acción, como dijo John, luego regresar Ver en la segunda. La primera acción no puede (directamente, de todos modos) decirle a la segunda qué vista usar.
Craig Stuntz
@ Craig eso ayuda un poco. Hay una "acción" y una "vista", dos cosas separadas. Entonces, ¿por qué funciona mi respuesta a continuación? RedirectToAction: sin cambios de vista. Estoy seguro de que esto es .net MVC 101 pero no lo entiendo. Gracias.
jeffreypriebe
20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }
Mahender Reddy
fuente
2
Esto usa la misma acción del controlador. RedirectToAction llama a una acción diferente. Esta fue la solución más fácil para mí.
RaoulRubin
6

La forma más sencilla es usar return View.

return View("ViewName");

Recuerde, el nombre físico de "ViewName" debe ser algo así como ViewName.cshtml en su proyecto, si está utilizando MVC C # / .NET.

Maeda
fuente
4

No estoy 100% seguro de cuáles son las condiciones para esto, pero para mí lo anterior no funcionó directamente, pensé que se acercó. Creo que fue porque necesitaba "id" para mi vista en el modelo que se llamaba "ObjectID".

Tenía un modelo con una variedad de datos. Solo necesitaba la identificación.

Antes de lo anterior, creé un nuevo objeto System.Web.Routing.RouteValueDictionary y agregué la identificación necesaria.

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(Nota: el proyecto MVC en cuestión no lo creé, así que no sé dónde están todos los bits "complicados" correctos).

Jeffreypriebe
fuente
3

Esto es lo que puede hacer:

return View("another view name", anotherviewmodel);
Andrés
fuente