Kann ich ein benutzerdefiniertes Modell Binder irgendwo anders als Global.asax registrieren?

StackOverflow https://stackoverflow.com/questions/3041242

  •  27-09-2019
  •  | 
  •  

Frage

Es wäre praktisch, um den Umfang eines benutzerdefiniertes Modell Binder nur für eine bestimmte Controller Aktion-Methode oder seine gesamten Steuerung zu begrenzen. Hanselman schrieb einen Satz, dass benutzerdefinierte Modelbinder-Registrierung für alternative Standorte impliziert aber nie zu Ende schien dachte:

  

Sie können entweder setzen dieses kundenspezifische Modell Binder verantwortlich für alle Ihre Datetime, indem es in der Global.asax Registrierung

Ist es möglich, diese Anmeldungen in einem kleineren Umfang des Steuerungssystems zu machen? Wenn ja, gibt es einen Grund zu tun zu vermeiden, so außerhalb des Global.asax MvcApplication (zum Beispiel Leistungsgründen)?

War es hilfreich?

Lösung

Als ich den Tabs schließe ich für diese Frage eröffnet, dass ich nicht, bevor er aufgibt erreicht hatte, fand ich jemand mit einer Antwort . Sie können eine ModelBinderAttribute zu Ihrer Ansicht Modelle zuweisen:

[ModelBinder(typeof(SomeEditorModelModelBinder))]
public class SomeEditorModel {
    // display model goes here
}
public class SomeEditorModelModelBinder : DefaultModelBinder {
    // custom model binder for said model goes here
}

Es ist zwar nicht ganz das, was ich suchte, es ist sogar noch spezifischer als es für einen Controller oder Controller-Methode registrieren.

Update

Dank Levis Kommentar zeigt eine viel bessere Lösung aus. Wenn Sie das Objekt mit einem benutzerdefinierten Modell Binder in einer MVC-Aktion-Methode direkt verbrauchen, können Sie einfach dekorieren diese Methode der Parameter mit der ModelBinder Eigenschaft.

public ActionResult SomeMethod([ModelBinder(typeof(SomeEditorModelBinder))]SomeEditorModel model) { ... }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top