2009-02-13 114 views
72

¿Es posible redirigir a una vista diferente desde un controlador?ASP.Net MVC redirigir a una vista diferente

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.

Respuesta

117

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

return RedirectToAction("Index", model); 

Luego, en su método de índice, devuelva la vista que desea.

+1

Si lo hice de esta manera, ¿cómo devuelvo una vista específica desde una acción del controlador? – Gavin

+14

return View ("ViewName"); –

+7

@Craig: la Vista de retorno no hace una redirección y la URL termina siendo la misma que antes. Por lo tanto, si se encuentra en "/ edit/MyItem", al devolver View ("showitem") obtendrá la vista "showitem" con la URL "/ edit /". Dependiendo de su situación, esto puede funcionar, pero no siempre. – jeffreypriebe

3

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

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

Antes de lo anterior creé un nuevo objeto System.Web.Routing.RouteValueDictionary y agregué el id. Necesario.

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

(Nota: el proyecto MVC en cuestión no creé, así que no sé donde todos los bits de la derecha "complicados" son.)

16
if (true) 
{ 
    return View(); 
} 
else 
{ 
    return View("another view name"); 
} 
+2

Esto utiliza el mismo controlador Acción. RedirectToAction llama a una acción diferente. Esta fue la solución más fácil para mí. – RaoulRubin

0

Esto es lo que puede hacer :

return View("another view name", anotherviewmodel); 
0

La manera más simple es utilizar la vista de retorno.

return View("ViewName"); 

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

Cuestiones relacionadas