Ben basit bir spam bloğu için bazı kodlar Yeniden kullanmak üzere bir ActionFilter
inşa ediyorum - temelde ben ne ben bir giriş metin kutusu ve gizli bir giriş kılan bir Html Helper
yöntemi var ve ActionFilter ben iki değer olup olmadığını kontrol olmasıdır aynı ya da değil. Değilse, doğrulama mantığımın geri kalanını kullanmak ve ModelStateError
'u ModelState
'a eklemek istiyorum ancak bunu nasıl yaparım? ActionFilter
'dan ModelStateError
'u nasıl ekleyebilirim?ModelState'e bir ActionFilter'dan nasıl erişirim?
GÜNCELLEME: İşte çalıştığım kod.
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);
}
Bu
ActionMethod
geçerli:: Bu özellik olan bir kontrolör eylemi test ederken,
ModelState.IsValid
hala gerekli formu değerlerden herhangi birini geçemiyor olsa
true
döndürür sadece
[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
if (ModelState.IsValid)
{
_posts.Add(postToCreate);
return RedirectToAction("Index");
}
return View();
}
Ben OnActionExecuting
yönteminin içinde bir kesme noktası belirlediğimde ve "Hata ayıklama sınamaları" nı geçtiğimde, kesme noktasının hiçbir zaman vurulmadığını fark ettim. Niye ya?
aslında. Yazdığınız diğer eylem filtreleri çalışır mı? Hiçbir şey bırakmadığınıza emin misiniz? – Gidon
Eh, kod çalışmadığından emin değilim. Ama ne yapabildiğimi anlayamıyorum ... Burada anlatılan her şeyi yapmış gibi görünüyor: http://msdn.microsoft.com/en-us/library/dd410056.aspx –