Tôi đang xây dựng một ActionFilter
để sử dụng lại một số mã cho khối spam đơn giản - về cơ bản những gì tôi làm là tôi có phương thức Html Helper
hiển thị hộp nhập liệu và đầu vào bị ẩn và trong ActionFilter tôi kiểm tra xem hai giá trị đó có giống nhau hay không. Nếu không, tôi muốn tận dụng phần còn lại của logic xác thực của tôi và thêm ModelStateError
vào ModelState
, nhưng làm cách nào để làm điều đó? Làm cách nào để thêm một số ModelStateError
từ whithin ActionFilter
?Làm cách nào để truy cập vào ModelState từ một ActionFilter?
CẬP NHẬT: Đây là mã tôi đang thử. Khi tôi thử nghiệm một hành động điều khiển có thuộc tính này, ModelState.IsValid
vẫn trả true
mặc dù tôi không vượt qua bất kỳ giá trị hình thức yêu cầu:
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);
}
Đây là ActionMethod
:
[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
if (ModelState.IsValid)
{
_posts.Add(postToCreate);
return RedirectToAction("Index");
}
return View();
}
Tôi chỉ nhận thấy rằng nếu tôi đặt điểm ngắt bên trong phương thức OnActionExecuting
và nhấn "Kiểm tra gỡ lỗi", điểm ngắt không bao giờ được nhấn. Tại sao?
Thực tế là breakpoint của bạn không được điểm nhấn với các giải pháp do tại sao bộ lọc của bạn không hoạt động. Các bộ lọc tác vụ khác bạn đã viết hoạt động? Bạn có chắc là bạn không bỏ sót điều gì không? – Gidon
Vâng, tôi không chắc chắn vì mã không chạy. Nhưng tôi không thể tìm ra những gì tôi có thể đã bỏ ra ... Tôi dường như đã làm tất cả mọi thứ được mô tả ở đây: http://msdn.microsoft.com/en-us/library/dd410056.aspx –