Ich habe ein Frage , um zu erfahren, warum in meiner Anwendung Textfelder hervorgehoben werden (dh roter Rand und rosa Hintergrund werden auf das Textfeld angewendet), wenn ich Modelbinding zur Validierung des Modells verwende ( TryUpdateModel () ), aber nicht, wenn ich manuell validiere ( ModelState.AddModelError ). Es ist jetzt 2 Tage ohne Antwort. Ich habe alles selbst ohne Erfolg ausprobiert. Also entscheide ich mich, die Frage anders zu stellen.
Wie ich IT verstehe, hier ist, wie ModelBinding eine Anfrage behandelt.
Hier ist meine Frage Wenn das Formular erneut angezeigt wird:
Was wird für die Textfelder getan, deren Werte nicht gültig sind, um hervorgehoben zu werden?
Ich weiß, dass es in Site.css nur wenige Klassen gibt, z. B. .input-validation-error und .field-validation-error , die auf das Textfeld angewendet werden. Vielleicht verwendet ModelBinding intern einen Befehl wie AddCss ("# MyTextBox", ".input-validation-error").
Wenn ich weiß, wie es funktioniert, kann ich es (vielleicht) manuell anwenden und mein Problem lösen.
BEARBEITEN
Wie von @Ian Galloway gefordert, hier ist der Code
%Vor%Nummer 2 bearbeiten
Ich habe eine der Ansichten gewählt (da alle dasselbe Problem haben). Die Ansicht heißt StateObjectifs.aspx
%Vor%
Danke für Ihre Hilfe.
Tatsächlich wird diese Hervorhebung von den HTML-Helfern durchgeführt, die die Textboxen rendern. Es prüft, ob im Modellzustand ein Fehler mit dem angegebenen Schlüssel vorliegt und fügt bei Bedarf die notwendigen CSS-Klassen hinzu.
Ich vermute, dass das Problem, das Sie haben, ist, dass der Schlüsselparameter, den Sie an ModelState.AddModelError übergeben, mit dem Namen des übereinstimmenden Steuerelements im Formular übereinstimmen muss.
(Wie würden Sie ansonsten davon ausgehen, dass die View-Engine weiß, welches Steuerelement in einem Fehlerzustand gerendert wird?)
Die Hervorhebung erfolgt durch CSS, das für die Textbox gilt. Also müssen Sie die CSS unten hinzufügen:
%Vor%}
Tags und Links asp.net-mvc model-binding