2012-03-23 19 views

Respuesta

18

Puede usar filterContext.Result para esto. Se debe tener este aspecto:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    //Check your condition here 
    if (true) 
    { 
     //Create your result 
     filterContext.Result = new EmptyResult(); 
    } 
    else 
     base.OnActionExecuting(filterContext); 
} 
+0

¿Por qué omite base.OnActionExecuting cuando su condición es verdadera? En mi caso, necesito que se ejecute antes de poder establecer el resultado. – xr280xr

33

Ver mi muestra la descarga y el artículo de MSDN Filtering in ASP.NET MVC.

Puede cancelar la ejecución del filtro en los métodos OnActionExecuting y OnResultExecuting estableciendo la propiedad Result en un valor no nulo.

No se invocarán los filtros OnActionExecuted y OnActionExecuting pendientes y el invocador no llamará al método OnActionExecuted para el filtro cancelado o para los filtros pendientes.

Se ejecutará el filtro OnActionExecuted para los filtros que se hayan ejecutado anteriormente. Se ejecutarán todos los filtros OnResultExecutingandOnResultExecuted.

El siguiente código de la muestra muestra cómo devolver un ActionResult específica cuando una determinada condición se cumple en OnActionExecuting:

if (filterContext.RouteData.Values.ContainsValue("Cancel")) 
{ 
    filterContext.Result = new RedirectResult("~/Home/Index"); 
    Trace.WriteLine(" Redirecting from Simple filter to /Home/Index"); 
} 
+2

Debe tenerse en cuenta que si tiene más de un filtro y el orden de los filtros debe especificar el parámetro "Pedir" al registrar su filtro para que pueda controlar el orden de ejecución como Rick ha descrito en sus detalles sobre cómo el resultado La propiedad filterContext.Result se comporta. –

+0

Buen punto Nick, pero vea mi sección Orden de filtro: la propiedad de pedido solo se aplica a los filtros de la misma clase. Auth siempre se ejecuta primero, excepción, último. – RickAndMSFT

3

Usted puede utilizar el siguiente código aquí.

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ... 
    if (needToRedirect) //your condition here 
    { 
     ... 
     filterContext.Result = new RedirectToAction(string action, string controller) 
     return; 
    } 
    ... 
} 

RedirectToAction le redirigirá la acción específica en función de la condición.

+0

RedirectToAction es un método (al menos en MVC5) por lo que no puedes new(). – rumblefx0

Cuestiones relacionadas