Html.TextBoxFor zeigt keinen aktualisierten Wert in der POST-Aktion an

8

Aus meiner Sicht habe ich

%Vor%

In meinem Controller (Post-Methode) habe ich das

%Vor%

Also, meine Frage ist: Wenn ich das Modell ändere, ändert der TextBoxFor seinen Wert nicht. TextBoxFor bekomme seinen Wert, wenn ich von get Methode zum Post komme, und später kann ich den Wert von TextBoxFor nicht ändern. Ich debugge, und mein Modell hat einen neuen Wert, aber TextBoxFor zeigt keinen neuen Wert.

Können Sie mir helfen?

    
cashmere 03.02.2011, 13:50
quelle

4 Antworten

11

Versuchen Sie:

%Vor%

Wenn nicht Ergebnis! ein JSON Ergebnis zurückgeben und dann per Javascript aktualisieren

    
Fábio Correia 25.06.2012, 14:03
quelle
1

Anstatt die Modellbindung zu verwenden, schlägt id vor, einen tryupdate-Aufruf zu verwenden.

%Vor%

Sehen Sie sich meine Antwort auf einen anderen Beitrag für die allgemeine Struktur an, die ich verwende. Es hat mich nie zuvor gescheitert und ich glaube, es deckt alle Grundlagen ab, wenn man Modelle von Benutzereingaben aktualisiert.

asp.net mvc-Controller veröffentlicht Best Practices

    
John S 22.09.2011 20:06
quelle
0

Herr Grok hatte ein ähnliches Problem diese Website. Er hatte bereits die ModelState.Clear () -Lösung gefunden, wollte aber eine Erklärung dafür, warum das funktioniert. Die am höchsten eingestufte Antwort auf der verknüpften Website schlug vor, dass das Verhalten des HTML-Helpers ein Fehler ist, für den ModelState.Clear () eine Problemumgehung ist. Bradwils auf dieser Website sagt jedoch, dass das Verhalten von Entwurf ist und die folgende Erklärung gibt:

Der Grund für die Verwendung des gebuchten Werts für Editoren und nicht für den Modellwert ist, dass das Modell den vom Benutzer eingegebenen Wert möglicherweise nicht enthalten kann. Stellen Sie sich vor, in Ihrem "int" -Editor hätte der Benutzer "Hund" getippt. Sie möchten eine Fehlermeldung mit der Meldung "Hund ist nicht gültig" anzeigen und "Hund" im Feld "Editor" lassen. Ihr Modell ist jedoch ein Int: Es kann unmöglich "Hund" speichern. Also behalten wir den alten Wert.

Wenn Sie die alten Werte im Editor nicht möchten, löschen Sie den Modellstatus. Dort wird der alte Wert gespeichert und aus den HTML-Helfern gezogen.

Trotz der Tatsache, dass es sich um ein Design handelt, ist dies ein sehr unerwartetes Verhalten für den Entwickler, und es ist bedauerlich, dass eine Interaktion mit dem ModelState für einen allgemeinen Programmierbedarf erforderlich ist.

Darüber hinaus könnte das Löschen des gesamten ModelState zu unerwarteten Problemen in anderen Bereichen führen (ich denke in Bezug auf die Validierung in nicht verwandten Modellfeldern). Vielen Dank an Peter Gluck (Antwort in einem Kommentar auf der Seite von Herrn Grok) für den Vorschlag des eingeschränkteren ModelState.Remove ("Schlüssel") und an Toby J. für die Entwicklung einer bequemeren Methode, die wann funktioniert Sie sind nicht sicher, was der Schlüssel sein sollte, wenn die Modelleigenschaft geschachtelt ist. Ich mag auch Tobys Methode, weil es nicht von einer Zeichenkette als Eingabe abhängt.

Diese Methode folgt mit geringfügigen Änderungen:

%Vor%     
pwilcox 20.07.2016 16:00
quelle
0

Hier ist eine weitere Arbeit, die ich gefunden habe. Anstelle von

%Vor%

tu dies

%Vor%

Dies kann nützlich sein, wenn Sie das Standardverhalten für jede Eingabe nicht überschreiben möchten.

    
and... break 04.01.2017 19:35
quelle

Tags und Links