2009-06-01 22 views
31

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?

+0

aslında. Yazdığınız diğer eylem filtreleri çalışır mı? Hiçbir şey bırakmadığınıza emin misiniz? – Gidon

+0

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 –

cevap

73

tarafından olurdu Yani: sizin kesme noktası filtre çalışmıyor neden çözüme isabet noktalarını olmak olmadığını filterContext.Controller.ViewData.ModelState

+1

Bunu denedim ama işe yaramıyor. Gönderiyi şu anda sahip olduğum kodla güncelledim. –

+1

Bu aslında sorduğum sorunun cevabı olduğu için, bunun için size güvenirim. "Yeni" sorunla yeni bir soru açtım ... –

+0

http://stackoverflow.com/questions/934647/why-do-none-of-my-actionfilters-run –

İlgili konular