Frage

Gibt es eine Möglichkeit, die Request.Form zu bearbeiten, bevor die Aktionsmethode auf die Parameter bindet? Ich habe bereits eine Reflexion Anruf Bearbeitung von Request.Form zu ermöglichen. Ich kann einfach nicht einen Punkt von der Erweiterbarkeit finden, wo ich es ändern kann, vor der Bindung auftritt.

UPDATE: So sieht es aus wie ich die Request.Form redigierte und haben es nicht erkennen. Ich war die Überprüfung von an dem gebundenen Parameter suchen. Das ist falsch b / c durch die Zeit, die Sie auf die Action der Form Wert erhalten haben bereits kopiert worden / auf / in dem Valueprovider. Die meiner Meinung nach, wo die Werte gezogen werden für die Bindung.

So wird die Frage, was der beste Weg ist, eine Filterung auf die Form Werte anzuwenden, bevor sie gebunden sind. Ich möchte immer noch die Bindung auftritt. Ich möchte nur, um die Werte bearbeiten, es zu binden, verwendet.

War es hilfreich?

Lösung 2

Ich landete auf dem Default die SetProperty Methode zur Verlängerung des Wert zu überprüfen, bevor mit dem Grundverhalten fortfahren. Wenn der Wert ein String führe ich meine Filterung.

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);
    }
}

Andere Tipps

Erstellen von benutzerdefinierten Filter und außer Kraft setzen OnActionExecuting():

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

oder einfach außer Kraft setzt OnActionExecuting() in Ihrem Controller

AKTUALISIERT:

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)
{
    ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top