Standardmäßig wird kein Modellstatusfehler erstellt, wenn kein Wert für eine Modelleigenschaft gefunden wird. Die Eigenschaft ist auf null oder einen Standardwert festgelegt: Die Bindung an eine Auflistung eines komplexen Datentyps unterscheidet sich nicht von der Bindung an eine normale Auflistung, außer dass die Benennung der Elemente etwas anders ist. Die Namen beginnen mit dem Index in eckigen Klammern gefolgt von einem Punkt und dem Namen der Eigenschaft. Beispiel [0]. Für jede Eigenschaft des komplexen Typs durchsucht die Modellbindung die Quellen für das Namensmusterpräfix.property_name. Wenn nichts gefunden wird, sucht es nach nur property_name ohne das Präfix. Hinweis: Der vorherige Code gibt einen BinderTypeModelbinder zurück. BinderTypeModelBinder fungiert als Factory für Modellbinder und bietet Abhängigkeitsinjektion (DI). Der AuthorEntityBinder erfordert DI für den Zugriff auf EF Core. Verwenden Sie BinderTypeModelBinder, wenn Ihr Modellbinder Dienste von DI erfordert.
Im vorherigen Beispiel sind die Modellbindungsziele Methodenparameter, die einfache Typen sind. Ziele können auch die Eigenschaften eines komplexen Typs sein. Nachdem jede Eigenschaft erfolgreich gebunden wurde, erfolgt die Modellüberprüfung für diese Eigenschaft. Der Datensatz, welche Daten an das Modell gebunden sind, und alle Bindungs- oder Validierungsfehler werden in ControllerBase.ModelState oder PageModel.ModelState gespeichert. Um herauszufinden, ob dieser Prozess erfolgreich war, überprüft die App das ModelState.IsValid-Flag. Kann nur auf Modelleigenschaften angewendet werden, nicht auf Methodenparameter. Bewirkt, dass die Modellbindung einen Modellstatusfehler hinzufügt, wenn die Bindung für die Eigenschaft eines Modells nicht auftreten kann. Hier ist ein Beispiel: Sie können das ModelBinder-Attribut auf einzelne Modelleigenschaften (z.
B. in einem Ansichtsmodell) oder auf Aktionsmethodenparameter anwenden, um einen bestimmten Modellbinder oder Modellnamen für nur diesen Typ oder diese Aktion anzugeben. Bei der Auswertung von Modellbindern wird die Auflistung der Anbieter in der Reihenfolge geprüft. Der erste Anbieter, der einen Binder zurückgibt, wird verwendet. Das Hinzufügen Ihres Anbieters am Ende der Auflistung kann dazu führen, dass ein integrierter Modellbinder aufgerufen wird, bevor Ihr benutzerdefinierter Ordner eine Chance hat. In diesem Beispiel wird der benutzerdefinierte Anbieter am Anfang der Auflistung hinzugefügt, um sicherzustellen, dass er für Author-Aktionsargumente verwendet wird. Standardmäßig sind Eigenschaften nicht an HTTP GET-Anforderungen gebunden. In der Regel benötigen Sie nur einen Datensatz-ID-Parameter. Die Datensatz-ID wird verwendet, um das Element in der Datenbank nachzuschlagen. Daher ist es nicht erforderlich, eine Eigenschaft zu binden, die eine Instanz des Modells enthält. In Szenarien, in denen Eigenschaften an Daten aus GET-Anforderungen gebunden werden sollen, legen Sie die SupportsGet-Eigenschaft auf true fest: Die Bindung an verschiedene Modelle abgeleiteter Typen wird als polymorphe Modellbindung bezeichnet. Die polymorphe benutzerdefinierte Modellbindung ist erforderlich, wenn der Anforderungswert an den spezifischen abgeleiteten Modelltyp gebunden werden muss.
Polymorphe Modellbindung: Es können mehrere Modellbinder in einer MVC-Anwendung vorhanden sein und Sie können auch Ihre eigene erstellen. In diesem Beitrag werde ich nur über den integrierten Binder, DefaultModelBinder, sprechen. In diesem Artikel wird erläutert, was Modellbindung ist, wie sie funktioniert und wie ihr Verhalten angepasst werden kann. Die Modellbindung funktioniert auch bei komplexen Typen. Die Modellbindung im MVC-Framework konvertiert automatisch Formularfelddaten der HttpPOST-Anforderung in die Eigenschaften eines komplexen Typparameters einer Aktionsmethode. Auf dem Screenshot oben können Sie sehen, dass ich einen Parameter in der URL übergeben habe. Nachdem das MVC-Framework den Prozess empfangen und das Routing ausgeführt hat, untersucht der Aktionsaufrufer die Indexmethode und findet einen int-Parameter. Anschließend ruft das Modellbinder für int seine BindModel-Methode auf, um den Wert von der URL an den Methodenparameter zu binden. Das MVC-Framework durchsucht vier Speicherorte nach einem passenden Parameter. Wenn eine gefunden wird, ist die Suche abgeschlossen und der Wert wird verarbeitet.
Die Speicherorte für die Suche sind: Die vorhergehende AuthorEntityBinder-Klasse soll einen benutzerdefinierten Modellbinder veranschaulichen. Die Klasse ist nicht dazu gedacht, bewährte Methoden für ein Suchszenario zu veranschaulichen. Binden Sie bei der Suche die authorId, und fragen Sie die Datenbank in einer Aktionsmethode ab. Dieser Ansatz trennt Modellbindungsfehler von NotFound-Fällen.