430 Stimmen

Deaktivierte Formulareingaben erscheinen nicht in der Anfrage

Ich habe einige deaktivierte Eingaben in einem Formular und möchte sie an einen Server senden, aber Chrome schließt sie von der Anfrage aus.

Gibt es eine Lösung für dieses Problem, ohne ein verstecktes Feld hinzuzufügen?

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />

    <!-- this does not appear in request -->
    <input type="textbox" name="Percentage" value="100" disabled="disabled" /> 

</form>

4voto

Erik Robinson Punkte 31

Ich finde, dies funktioniert einfacher. readonly das Eingabefeld, dann Stil es so der Endbenutzer weiß, es ist nur lesen. Eingaben platziert hier (von AJAX zum Beispiel) kann noch senden, ohne zusätzlichen Code.

<input readonly style="color: Grey; opacity: 1; ">

4voto

Arth Punkte 12000

Semantisch gesehen scheint dies das richtige Verhalten zu sein

Ich würde mich fragen: " Warum muss ich diesen Wert übermitteln? "

Wenn Sie eine deaktivierte Eingabe in einem Formular haben, dann wollen Sie vermutlich nicht, dass der Benutzer den Wert direkt ändert

Jeder Wert, der in einer deaktivierten Eingabe angezeigt wird, sollte entweder

  1. Ausgabe von einem Wert auf dem Server, der das Formular erstellt hat, ou
  2. wenn das Formular dynamisch ist, aus den anderen Eingaben im Formular berechenbar sein

Unter der Annahme, dass der Server, der das Formular verarbeitet, derselbe ist wie der Server, der es ausliefert, sollten alle Informationen zur Reproduktion der Werte der deaktivierten Eingaben bei der Verarbeitung verfügbar sein

In der Tat, um die Datenintegrität zu wahren - selbst wenn der Wert der deaktivierten Eingabe an den Verarbeitungsserver gesendet wurde, sollten Sie ihn wirklich validieren. Diese Validierung würde die gleichen Informationen erfordern, die Sie ohnehin für die Reproduktion der Werte benötigen würden!

Ich würde fast behaupten, dass schreibgeschützte Eingaben auch nicht in der Anfrage gesendet werden sollten

Ich lasse mich gerne korrigieren, aber alle Anwendungsfälle Ich kann mir vorstellen, wo schreibgeschützte/deaktivierte Eingaben gemacht werden müssen sind in Wirklichkeit nur getarnte Stylingprobleme

2voto

Lwin Htoo Ko Punkte 2286

Einfache Abhilfe - verwenden Sie einfach ein ausgeblendetes Feld als Platzhalter für Select, Checkbox und Radio.

Von diesem Code zu -

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />

    <!-- this does not appear in request -->
    <input type="textbox" name="Percentage" value="100" disabled="disabled" /> 
    <select name="gender" disabled="disabled">
          <option value="male">Male</option>
          <option value="female" selected>Female</option>
    </select>

</form>

dieser Code -

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />

    <input type="textbox" value="100" readonly /> 

    <input type="hidden" name="gender" value="female" />
    <select name="gender" disabled="disabled">
          <option value="male">Male</option>
          <option value="female" selected>Female</option>
    </select>
</form>

1voto

Pedro Coelho Punkte 1137

Zusätzlich zur Antwort von Tom Blodget können Sie auch einfach @HtmlBeginForm als Formularaktion hinzufügen, etwa so:

 <form id="form" method="post" action="@Html.BeginForm("action", "controller", FormMethod.Post, new { onsubmit = "this.querySelectorAll('input').forEach(i => i.disabled = false)" })"

1voto

Geben Sie in Ihrem Fall das Attribut "Name" nicht an <input type="textbox" value="100" disabled="disabled" /> Wenn Ihre Anfrage das Attribut "Name" identifiziert, wenn Ihre Anfrage das Attribut "ID" verwendet, setzen Sie niemals "ID".

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