Как получить доступ к ModelState из ActionFilter? - PullRequest
38 голосов
/ 01 июня 2009

Я создаю 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 и нажимаю «Отладочные тесты», точка останова никогда не будет достигнута. Почему?

1 Ответ

83 голосов
/ 01 июня 2009

Это было бы путем: filterContext.Controller.ViewData.ModelState

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...