سؤال

أنا بناء آن 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top