मैं एक साधारण स्पैम ब्लॉक के लिए कुछ कोड का पुन: उपयोग करने के लिए 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
विधि के अंदर ब्रेकपॉइंट सेट किया है और "डीबग परीक्षण" हिट किया है, तो ब्रेकपॉइंट कभी हिट नहीं होता है। क्यूं कर?
तथ्य यह है कि अपने ब्रेकप्वाइंट समाधान क्यों अपने फिल्टर काम नहीं करता है के लिए हिट अंक नहीं किया जा रहा है। आपके द्वारा लिखे गए अन्य एक्शन फ़िल्टर काम करते हैं? क्या आप वाकई कुछ भी नहीं छोड़े हैं? – Gidon
ठीक है, मुझे यकीन नहीं है क्योंकि कोड नहीं चल रहा है। लेकिन मैं यह नहीं समझ सकता कि मैं क्या छोड़ सकता था ... मैंने यहां वर्णित सब कुछ किया है: http://msdn.microsoft.com/en-us/library/dd410056.aspx –