Como acesso o ModelState a partir de um ActionFilter?
Estou construindo umActionFilter
para reutilizar algum código para um simples bloco de spam - basicamente o que faço é ter umHtml Helper
método que renderiza uma caixa de texto de entrada e uma entrada oculta e, no ActionFilter, verifico se os dois valores são iguais ou não. Caso contrário, quero aproveitar o restante da minha lógica de validação e adicionar umModelStateError
aoModelState
, mas como faço isso? Como adiciono umModelStateError
de dentro doActionFilter
?
UPDATE: Aqui está o código que estou tentando. Quando eu testo uma ação do controlador que possui esse atributo,ModelState.IsValid
ainda retornatrue
mesmo que eu não passe nenhum dos valores de formulário necessários:
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);
}
Isto é oActionMethod
:
[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
if (ModelState.IsValid)
{
_posts.Add(postToCreate);
return RedirectToAction("Index");
}
return View();
}
Acabei de notar que, se eu definir um ponto de interrupção dentro doOnActionExecuting
e pressione "Testes de depuração", o ponto de interrupção nunca é atingido. Por quê