2009-06-01 23 views
31

Estoy construyendo un ActionFilter para reutilizar algún código para un simple bloque de correo basura; básicamente, lo que hago es que tengo un método Html Helper que representa un cuadro de entrada y una entrada oculta, y en ActionFilter verifico si los dos valores son lo mismo o no. Si no, quiero aprovechar el resto de mi lógica de validación y agregar un ModelStateError al ModelState, pero ¿cómo hago eso? ¿Cómo agrego un ModelStateError desde el ActionFilter?¿Cómo accedo a ModelState desde un ActionFilter?

ACTUALIZACIÓN: Aquí está el código con el que estoy tratando. Cuando la prueba de una acción de un controlador que tiene este atributo, ModelState.IsValid sigue devolviendo true a pesar de que no paso cualquiera de los valores de los formularios requeridos:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    var r = filterContext.HttpContext.Request; 
    if (r.Form["sixtimesnine"] != r.Form["fourtytwo"] || string.IsNullOrEmpty(r.Form["sixtimesnine"]) || string.IsNullOrEmpty(r.Form["fourtytwo"])) 
    { 
     filterContext.Controller.ViewData.ModelState.AddModelError("Spam", this.ErrorMessage); 
    } 
    base.OnActionExecuting(filterContext); 
} 

Este es el ActionMethod:

[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")] 
public ActionResult Write(GuestbookPost postToCreate) 
{ 
    if (ModelState.IsValid) 
    { 
     _posts.Add(postToCreate); 
     return RedirectToAction("Index"); 
    } 
    return View(); 
} 

acabo noté que si establecí un punto de interrupción dentro del método OnActionExecuting y presioné "Pruebas de depuración", nunca se golpea el punto de interrupción. ¿Por qué?

+0

El hecho de que el punto de interrupción no está siendo puntos de golpe a la solución de por qué el filtro no funciona. ¿Funcionan otros filtros de acción que escribió? ¿Estás seguro de que no has omitido nada? – Gidon

+0

Bueno, no estoy tan seguro ya que el código no se está ejecutando. Pero no puedo entender lo que podría haber omitido ... Parece que he hecho todo lo que se describe aquí: http://msdn.microsoft.com/en-us/library/dd410056.aspx –

Respuesta

73

Eso sería por: filterContext.Controller.ViewData.ModelState

+1

Intenté esto, pero no parece funcionar Actualicé mi publicación con el código que tengo actualmente. –

+1

Como esta es en realidad la respuesta a la pregunta que hice, lo acreditaré. He abierto una nueva pregunta con el "nuevo" problema ... –

+0

http://stackoverflow.com/questions/934647/why-do-none-of-my-actionfilters-run –

Cuestiones relacionadas