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é?
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
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 –