2009-06-01 20 views
31

मैं एक साधारण स्पैम ब्लॉक के लिए कुछ कोड का पुन: उपयोग करने के लिए ActionFilter का निर्माण कर रहा हूं - मूल रूप से मैं क्या करता हूं कि मेरे पास Html Helper विधि है जो एक इनपुट टेक्स्टबॉक्स और एक छिपी हुई इनपुट प्रदान करती है, और एक्शनफ़िल्टर में मैं जांचता हूं कि क्या दो मान हैं वही या नहीं। यदि नहीं, तो मैं अपने शेष सत्यापन तर्क का लाभ उठाना चाहता हूं और ModelStateError को ModelState पर जोड़ना चाहता हूं, लेकिन मैं यह कैसे कर सकता हूं? मैं ActionFilter पर ModelStateError कैसे जोड़ूं?मैं एक्शनफ़िल्टर से मॉडलस्टेट तक कैसे पहुंचूं?

अद्यतन: यहां कोड है जिसके साथ मैं कोशिश कर रहा हूं। जब मैं एक नियंत्रक कार्रवाई इस विशेषता है कि परीक्षण, 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 विधि के अंदर ब्रेकपॉइंट सेट किया है और "डीबग परीक्षण" हिट किया है, तो ब्रेकपॉइंट कभी हिट नहीं होता है। क्यूं कर?

+0

तथ्य यह है कि अपने ब्रेकप्वाइंट समाधान क्यों अपने फिल्टर काम नहीं करता है के लिए हिट अंक नहीं किया जा रहा है। आपके द्वारा लिखे गए अन्य एक्शन फ़िल्टर काम करते हैं? क्या आप वाकई कुछ भी नहीं छोड़े हैं? – Gidon

+0

ठीक है, मुझे यकीन नहीं है क्योंकि कोड नहीं चल रहा है। लेकिन मैं यह नहीं समझ सकता कि मैं क्या छोड़ सकता था ... मैंने यहां वर्णित सब कुछ किया है: http://msdn.microsoft.com/en-us/library/dd410056.aspx –

उत्तर

73

द्वारा किया जाएगा कि: filterContext.Controller.ViewData.ModelState

+1

मैंने कोशिश की, लेकिन मैंने कोशिश की, लेकिन यह काम नहीं लग रहा है। मैंने अपनी पोस्ट को वर्तमान में कोड के साथ अपडेट किया है। –

+1

चूंकि यह वास्तव में मुझसे पूछे गए प्रश्न का उत्तर है, मैं इसके लिए आपको श्रेय दूंगा। मैंने "नई" समस्या के साथ एक नया प्रश्न खोला है ... –

+0

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

संबंधित मुद्दे