Я создаю ActionFilter
для повторного использования некоторого кода для простого спам-блока. В основном я использую метод Html Helper
, который отображает текстовое поле ввода и скрытый ввод данных, являются ли эти два значения одинаковыми или нет. Если нет, я хочу использовать оставшуюся часть моей логики проверки и добавить ModelStateError
в ModelState
, но как это сделать? Как добавить ModelStateError
из ActionFilter
?
UPDATE: Здесь код, с которым я пытаюсь. Когда я тестирую действие контроллера, имеющее этот атрибут, ModelState.IsValid
все еще возвращает true
, хотя я не передаю ни одного из требуемых значений формы:
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);
}
Это ActionMethod
:
[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
if (ModelState.IsValid)
{
_posts.Add(postToCreate);
return RedirectToAction("Index");
}
return View();
}
Я только заметил, что если я установил точку останова внутри метода OnActionExecuting
и ударил "тесты отладки", точка останова никогда не попадает. Почему?