سؤال

هل هناك طريقة لتحرير نموذج الطلب قبل أن يرتبط أسلوب الإجراء بالمعلمات؟لدي بالفعل مكالمة انعكاس لتمكين تحرير Request.Form.لا يمكنني العثور على نقطة قابلية للتوسعة حيث يمكنني تغييرها قبل حدوث الربط.

تحديث:لذا يبدو أنني كنت أقوم بتحرير نموذج الطلب ولم أدرك ذلك.كنت أتحقق من خلال النظر إلى المعلمات المرتبطة.هذا غير صحيح ب/ج بحلول الوقت الذي تصل فيه إلى ActionFilter، تم بالفعل نسخ/تعيين قيم النموذج إلى/في ValueProvider.وأعتقد أن هذا هو المكان الذي يتم فيه سحب القيم للربط.

لذلك يصبح السؤال ما هي أفضل طريقة لتطبيق بعض التصفية على قيم النموذج قبل ربطها.ما زلت أريد أن يحدث الربط.أريد فقط تعديل القيم التي يستخدمها للربط.

هل كانت مفيدة؟

المحلول 2

وانتهى بي الأمر تمديد طريقة SetProperty على DefaultModelBinder للتحقق من قيمة قبل الشروع في سلوك القاعدة. إذا كانت القيمة هي سلسلة أقوم تصفية بلدي.

public class ScrubbingBinder : DefaultModelBinder
{
    protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
    {
        if (value.GetType() == typeof(string))
            value = HtmlScrubber.ScrubHtml(value as string, HtmlScrubber.SimpleFormatTags);
        base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
    }
}

نصائح أخرى

إنشاء مرشح مخصص وتجاوزه OnActionExecuting():

public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
    }
}

أو ببساطة تجاوز OnActionExecuting() في وحدة التحكم الخاصة بك

محدث:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var actionName = filterContext.ActionDescriptor.ActionName;

    if(String.Compare(actionName, "Some", true) == 0 && Request.HttpMethod == "POST")
    {  
        var form = filterContext.ActionParameters["form"] as FormCollection;

        form.Add("New", "NewValue");
    }
}

public ActionResult SomeAction(FormCollection form)
{
    ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top