49 Stimmen

Model Binding mit deaktiviertem Textfeld

Ich habe ein Textfeld, das ich definiere als

<%= Html.TextBox("Username", Model.Form.Username, 
        new { @class = "textbox", @disabled = "disabled" })%>

Die Aktion ist definiert als

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateAntiForgeryToken]
    public ActionResult EditLogin(LoginForm post) {

        ...

        return View(model);
    }

Wenn ich POST zu diesem, Username wird leer sein. Alle anderen Eigenschaften werden korrekt gebunden, aber wenn ich die @disabled="disabled" a @readonly="readonly" der Benutzername wird richtig gebunden und alles funktioniert.

Es sieht so aus, als ob die Modellbindung Werte in deaktivierten Feldern ignoriert. Gibt es eine Möglichkeit, dies zu umgehen? Ich brauche immer noch den Wert des Feldes, um an das Modell zu binden. Ich kann readonly verwenden, aber würde es vorziehen, deaktiviert zu verwenden, so dass es visuell offensichtlich für den Benutzer ist, dass sie den Wert des Feldes nicht bearbeiten können.

1voto

baHI Punkte 1352

Der einfachste Weg, deaktivierte Felder zu übermitteln, besteht darin, sie vor dem Übermitteln in ein unsichtbares, nicht deaktiviertes Steuerelement zu kopieren. Einige Leute erstellen diese Steuerelemente manuell und verbinden sich mit dem On-Change-Ereignis in jQuery, um sie bei Bedarf zu kopieren, aber diese Lösung unten ist generisch, einfach und weniger geschwätzig - obwohl eine Regel: Sie müssen eine saubere Seite nach dem Postback erstellen (rendern) (also

$('#submitBtn').closest('form').one('submit', function() {

    var $form = $(this);

    // input, textarea, select, option, ----- button, datalist, keygen, output, optgroup
    $form.find('input:disabled, textarea:disabled, select:disabled, option:disabled').each(function () {

        var $item = $(this);

        var hiddenItem = $item.clone();
        hiddenItem.removeAttr('id');
        hiddenItem.removeAttr('disabled');
        hiddenItem.attr('style', 'display: none');

        $item.after(hiddenItem);
    });

});

0voto

user12345 Punkte 185

@readonly = true funktioniert auf meiner Seite nicht. Ich habe zusätzliche Nachforschungen angestellt. Hier ist der Artikel, der es erklärt

Das ReadOnly-Attribut funktioniert nicht in ASP.NET MVC-Modellen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X