Kann ich ein benutzerdefiniertes Modell Binder irgendwo anders als Global.asax registrieren?
-
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)?
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) { ... }