Я создаю ActionFilter
для повторного использования некоторого кода для простого спам-блока - в основном я делаю то, что у меня есть метод Html Helper
, который отображает текстовое поле ввода и скрытый ввод, и в ActionFilter я проверяю являются ли эти два значения одинаковыми или нет. Если нет, я хочу использовать оставшуюся логику проверки и добавить ModelStateError
к ModelState
, но как мне это сделать? Как добавить ModelStateError
из ActionFilter
?
ОБНОВЛЕНИЕ: Вот код, который я пытаюсь использовать. Когда я тестирую действие контроллера, имеющее этот атрибут, 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
и нажимаю «Отладочные тесты», точка останова никогда не будет достигнута. Почему?