asp.net-mvc response.redirect

En ASP.NET MVC, ¿cómo funciona response.redirect?



asp.net-mvc (5)

He utilizado response.redirect en formularios web clásicos ASP y ASP.NET. Sin embargo, con MVC 2.0, me estoy topando con algo peculiar.

Tengo un método privado en una clase de controlador que es usado por múltiples métodos de controlador para ayudar a cargar y validar cierta información. Este método privado se configura para redirigir si se descubre un problema en una página de mensaje de error genérico.

El gran problema que estoy notando es que la clase de controlador de llamada y la vista de página intentan completar el procesamiento y la carga antes de que realmente tenga lugar la redirección. Esto es molesto en el desarrollo porque la Vista genera excepciones que debo ignorar antes de que finalmente se cargue mi página de error genérico.

Como se mencionó anteriormente, estoy acostumbrado al modelo anterior de response.redirect que impidió que se ejecutara el código subsiguiente en una página, ya que la nueva página se cargaría.

Cualquier ayuda o consejo sobre redirecciones en MVC sería muy apreciado.


El mecanismo convencional para redireccionar en ASP.Net MVC es devolver un objeto de tipo RedirectResult al cliente. Si esto se hace antes de que se llame a su método de Vista, sus métodos de vista nunca serán llamados.

Si llama a Response.Redirect, en lugar de dejar que el controlador frontal de Asp.Net MVC lo haga por usted, su método de controlador continuará hasta que finalice o lance una excepción.

La solución idiomática para su problema es que su método privado devuelva un resultado que su controlador pueda usar.

por ejemplo:

public ActionResult Edit(MyEntity entity) { if (!IsValid()) return Redirect("/oops/"); ... return View(); } private bool IsValid() { if (nozzle==NozzleState.Closed) return false; if (!hoseAttached) return false; return (userRole==Role.Gardener); }


En ASP.NET MVC, normalmente redireccionaría a otra página devolviendo un RedirectResult desde el método del controlador.

Ejemplo:

public ActionResult Details(int id) { // Attempt to get record from database var details = dataContext.GetDetails(id); // Does requested record exist? if (details == null) { // Does not exist - display index so user can choose return RedirectToAction("Index"); } // Display details as usual return View(details); }


En MVC nunca use Response.Redirect use

return RedirectToAction("ActionResultName", "ControllerName");

En cuanto a POR QUÉ NO usar Response.Redirect en MVC:

  1. Problemas de rendimiento con él
  2. No se siguen los patrones y convenciones estándar de asp.net MVC que se han creado específicamente para MVC.

Prueba este código en mvc view page lode

if (Session["UserName"] == null) { this.Response.Redirect("LogOn"); }


se recomienda y es la única forma de redireccionar a asp.net en la acción del controlador mvc usando

return Redirect("/page/pagename.aspx");

de otra manera podemos redirigir usando (no recomendado y de mala manera)

Response.Redirect("/page/pagename.aspx", true);

funcionará para la redirección, pero el problema es que borrará todos nuestros valores de sesión. así que ¿por qué no es recomendable.