간단한 스팸 차단을 위해 코드를 재사용하기 위해 ActionFilter
을 구축하고 있습니다. 기본적으로 입력 텍스트 상자와 숨겨진 입력을 렌더링하는 Html Helper
메서드가 있고 ActionFilter에서 두 값이 같은지 확인합니다. 동일 또는 아닙니다. 그렇지 않은 경우 나머지 유효성 검사 로직을 활용하여 ModelStateError
을 ModelState
에 추가하고 싶습니다. 어떻게해야합니까? ActionFilter
에서 ModelStateError
을 어떻게 추가합니까?ActionFilter에서 ModelState에 액세스하려면 어떻게합니까?
업데이트 : 다음은 내가 시도하고있는 코드입니다.
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
입니다 : :이 속성이 컨트롤러 액션을 테스트 할 때,
ModelState.IsValid
아직도 내가 필요한 양식 값 중 하나를 통과하지 않더라도
true
을 반환 단지
[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
if (ModelState.IsValid)
{
_posts.Add(postToCreate);
return RedirectToAction("Index");
}
return View();
}
내가 중단 점을 OnActionExecuting
메서드 안에 넣고 "디버그 테스트"를 누르면 중단 점에 결코 도달하지 않는다는 것을 알게되었습니다. 왜?
사실. 작성한 다른 작업 필터가 작동합니까? 당신은 아무것도 빠뜨리지 않았습니까? – Gidon
글쎄, 나는 코드가 실행되고 있지 않다는 것이 확실하지 않다. 그러나 나는 내가 뺄 수있는 것을 알아낼 수 없다. 나는 여기에 설명 된 모든 것을 다한 것처럼 보인다 : http://msdn.microsoft.com/en-us/library/dd410056.aspx –