Ich habe MVC vor kurzem benutzt und ich werde wenig enttäuscht. Anstatt mir zu helfen, steht mir der Rahmen im Weg.
Ich versuche eine Controlleraktion wie diese (Pseudocode) zu schreiben
%Vor%Grundsätzlich möchte ich die Kontrolle darüber haben, wann mein View-Modell erstellt und wann es validiert wird. Ist das möglich? Wie kann ich die CreateModel-Methode implementieren? Beachten Sie, dass ich möglicherweise verschiedene View-Modelle innerhalb dieser Controller-Aktion erstellen möchte.
* Rant: Ich verstehe nicht wirklich, warum View-Model-Bindung und Validierung in DefaultModelBinder zusammengemischt sind. Scheint wie Code riechen. Besonders, wenn es schwierig ist, dieses Verhalten zu überschreiben.
Sie können nach eigenem Ermessen ein vorhandenes Modell erstellen und an dieses binden:
%Vor% Sie haben auch die Möglichkeit, Ihr eigenes% zu erstellen. co_de% , wenn Sie die vollständige Kontrolle über den Bindungsprozess haben möchten. Sie können den Standardmodellbinder ersetzen, oder Sie können spezifische IModelBinder
Implementierungen für bestimmte Typen registrieren. Ich würde jedoch vorschlagen, dass Sie, wenn Ihre Bindungslogik nicht einfach ist, Ihren benutzerdefinierten Modellbinder wahrscheinlich von IModelBinder
ableiten und einfach die Teile überschreiben möchten, die Sie nicht mögen.
Ich hasse es, einen Troll-ischen Kommentar zu hinterlassen, aber 9 von 10 Fällen ist der Grund dafür, dass jemand den Eindruck hat, dass ein Framework ihnen in die Quere kommt, weil sie noch nicht verstehen, wie man es richtig einsetzt. Hier ist ein Artikel mit allgemeinen Informationen Tipps zur Modellbindung .
Was Ihre Antwort betrifft: Validierung und Bindung sind getrennt, der Standardmodellbinder löst jedoch die Validierung aus. Der Grund dafür ist, dass Ihre Anwendung Probleme, die an fehlende / ungültige / unvollständige Werte binden, ordnungsgemäß verarbeiten kann, anstatt zuzulassen, dass die Bindung im Hintergrund fehlschlägt oder Ausnahmen ausgelöst werden.
Sie können die IModelBinder-Schnittstelle nutzen und einen vollständigen benutzerdefinierten Modellbinder schreiben. Hier wird es gut erklärt. Im Wesentlichen stellt diese Schnittstelle eine Methode "BindModel" zur Verfügung, mit der Sie das Bindungsverhalten von Modellen zusammen mit der Validierung steuern können.
Dies könnte jedoch die Angelegenheit komplizieren und Sie könnten in Spaghetti-Code kommen. Ich würde vorschlagen, eine einfache "Aktion pro Modell", wenn es Ihnen passt. Du kannst also so etwas schreiben:
%Vor%Tags und Links asp.net-mvc-3 c# model-binding