كيف يمكنني الوصول إلى ModelState من ActionFilter؟
-
06-09-2019 - |
سؤال
أنا بناء آن ActionFilter
لإعادة استخدام بعض التعليمات البرمجية لحظر البريد المزعج بسيط - أساسا ما أقوم به هو أن لدي Html Helper
الطريقة التي تجعل مربعي الإدخال وإدخال مخفي، وفي ActionFilter أتحقق مما إذا كانت القيمتين هي نفسها أم لا. إذا لم يكن الأمر كذلك، أريد الاستفادة من بقية منطق التحقق من الصحة وإضافة ModelStateError
إلى ModelState
, ، ولكن كيف أفعل ذلك؟ كيف أضيف ModelStateError
من ماهاين ActionFilter
?
تحديث: إليك الرمز الذي أحاوله. عندما أقوم باختبار إجراء تحكم يحتوي على هذه السمة، 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
الطريقة واضغط على "اختبارات التصحيح"، ولا يتم ضرب نقطة التوقف أبدا. لماذا ا؟
المحلول
سيكون ذلك عن طريق:filterContext.Controller.ViewData.ModelState