2009-02-03 14 views
13

Tengo un ActionFilter que comprueba si un parámetro en la URL es válido. Si no es válido, debo renderizar una Vista. No quiero redirigir, porque todavía necesito el ActionExecutingContext. ¿Se puede hacer eso?Vista de devolución de ActionFilter

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     Guid processIdentifier = (Guid)filterContext.RouteData.Values["processIdentifier"]; 
     //if processIdentifier not found render a view with message and some other objects in ViewData 
     filterContext.Controller.ViewData.ModelState.AddModelError("WrongProcessIdentifier", "The process-id you supplied is not valid"); 
     base.OnActionExecuting(filterContext); 
    } 

Respuesta

31

HandleErrorAttribute tenía lo que estaba buscando.

filterContext.Result = new ViewResult 
      { 
       ViewName = "MessagePage", 
       ViewData = filterContext.Controller.ViewData, 
       TempData = filterContext.Controller.TempData 
      }; 
+0

Creo que deberías aceptar tu propia respuesta porque incluye el código –

+1

Para lo que sea que valga la pena, intencionalmente no incluí el código, ya que esta área de código está cambiando con cada versión del framework MVC en este momento. Creo que la respuesta correcta es "hacer lo que haga el marco actualmente". –

1

Sí. Mira la fuente de HandleErrorAttribute.

0

probar este

[HandleError] 
public ActionResult MyAction (int id) 
{ 
    // ... 
} 

y poner la vista que desea dictada en que ~/Views/Shared/Error.ascx.

+0

Los filtros como [HandleError] se aplican solo a los métodos de acción. El método OnActionExecuting() es en sí mismo un filtro en lugar de un método de acción, por lo que atributos como este no tienen ningún efecto. – Levi

+0

Lo siento, ni siquiera miré el método. He actualizado –

Cuestiones relacionadas