página de error diferente para la vista parcial

Tengo una página de error con todo el diseño y el encabezado, que funciona bien cuando se produce un error en la vista principal, muestra la página de error correctamente. Pero cuando se produce un error al representar una vista parcial, se rompe toda la interfaz de usuario, porque la página de error también tiene encabezado,

Así que quería saber dentro de Global.asax (application_Error) que si la solicitud es para una vista parcial, redirigirla a la página PartialError, de lo contrario, redirigirla a la página Fullerror.

Hágame saber cómo puedo lograrlo. Gracias.

preguntado el 27 de agosto de 11 a las 20:08

¿Estás haciendo esta solicitud parcial por Ajax? -

1 Respuestas

Sugiero usar el atributo de filtro. Puede implementar algo como esto:

public class RedirectOnErrorAttribute : FilterAttribute, IExceptionFilter {

bool IsPartialRequest = false;

public void OnException(ExceptionContext filterContext) {
        if(filterContext.ExceptionHandled) return;
        /*then you can redirect to a specific page or to, for example,
special error handling controller*/
         filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "HandleError", isPartialError = IsPartialRequest }));
         filterContext.ExceptionHandled = true;
         filterContext.HttpContext.Response.Clear();
}
}

Y en el controlador de manejo de errores en HandleError método de acción, puede devolver una Vista específica dependiendo de la isPartialError parámetro. Por cierto, puede hacer otras cosas útiles en este método de acción, por ejemplo, registrar información de error de alguna manera.

Para usar este atributo, puede decorar sus clases de controlador con él:

[RedirectOnError]
public class MyController : Controller {

  public ViewResult Index () {}
  public ActionResult Create() {}

  [RedirectOnError(IsPartialRequest=true)]
  public PartialViewResult ListCategories() {}

}

preste atención al uso de atributos con ListCategories método - Dije explícitamente que esta es la solicitud parcial. La razón por la que lo hice es simple: el sistema de enrutamiento no sabe nada sobre el hecho de que el resultado se usará como parcial.

Respondido el 15 de Septiembre de 11 a las 12:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.