Подтвердить что ты не робот

Как мне получить доступ к ModelState из ActionFilter?

Я создаю 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 и ударил "тесты отладки", точка останова никогда не попадает. Почему?

4b9b3361

Ответ 1

Это будет: filterContext.Controller.ViewData.ModelState