Wie übermittle ich deaktivierte Eingaben in ASP.NET MVC?

Lesezeit: 5 Minuten

Benutzer-Avatar
Sanchitos

Wie übermittle ich deaktivierte Eingaben in ASP.NET MVC?

  • Im Allgemeinen müssen Sie Ihre Frage als Frage formulieren und die Antwort dann separat posten. Abstimmung zum Schließen; empfehlen, den Teil „Antwort“ in eine tatsächliche Antwort zu verschieben.

    – Georg Stocker

    23. April 2010 um 18:24 Uhr

  • Ich glaube, @Dhaval Post ist genau die Antwort, weil das Wort in Ihrer Frage deaktiviert ist.

    – QMaster

    11. September 2016 um 14:46 Uhr

Kannst du das Feld nicht machen? readonly="readonly" Anstatt von disabled="disabled"? Ein schreibgeschützter Feldwert wird an den Server übermittelt, kann aber vom Benutzer weiterhin nicht bearbeitet werden. EIN SELECT Tag ist jedoch eine Ausnahme.

  • readonly funktioniert, aber das Feld wird nicht ausgegraut. Hier ist ein Beispiel, das ich verwende: <%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %> Wie kann ich es so grau machen, dass es optisch so aussieht, als wäre es nicht bearbeitbar? Besser noch können wir etwas Ähnliches wie LabelFor verwenden, ich habe LabelFor ausprobiert, aber es wird nur der Anzeigename abgerufen ….

    – Voodoo Kind

    26. November 2010 um 22:32 Uhr


  • 4 Jahre mit .net Asp und ich wusste nie, dass deaktivierte Eingaben keine Post zurückbekommen … wie ist das an mir vorbeigegangen? Fügen Sie einfach ein verstecktes Feld für die deaktivierte Auswahl hinzu und alles wird sortiert. (Auch wenn die IDs auf dem Formular wiederholt werden, was nicht zulässig ist)

    – Piotr Kula

    10. Juni 2013 um 15:54 Uhr

  • Das funktioniert nicht für type="checkbox" Eingaben entweder

    – Nathan

    11. Februar 2015 um 21:19 Uhr

  • Ich versuche, das Gleiche mit Optionsfeldern zu tun, aber readonly scheint bei ihnen nicht zu funktionieren.

    – Randy R

    31. August 2016 um 3:04 Uhr

Benutzer-Avatar
Sanchitos

Danke an alle:

So wie ich das gelöst habe:

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";

Notiz:

Ich habe diese Informationen in der Antwort erhalten, aber ich wurde bearbeitet.

  • Das hat bei mir nicht ganz funktioniert (habe es herausgefunden dank dieser SO-Link). Das hat funktioniert: textBox.Attributes.Add("readonly", "readonly"); und die Erklärung ist im Link

    – Brian-d

    20. Dezember 2013 um 20:48 Uhr


  • Das ist gut, dass Sie es bearbeitet haben, da dies für mich sinnvoller ist.

    – Jawar

    3. Dezember 2015 um 8:09 Uhr

  • Readonly scheint der richtige Weg zu sein. Es macht keine seltsamen Dinge wie das Zurückstellen des Steuerelements, erlaubt aber nicht, es zu bearbeiten. Vielen Dank!

    – Mariusz

    28. Juni 2016 um 10:36 Uhr

  • Um Michael Brennts Kommentar hinzuzufügen, wenn Sie jQuery verwenden, wird die zweite Zeile $("#textBoxId").css("color", "#c0c0c0").

    – F1Krazy

    9. April 2019 um 10:10 Uhr

Benutzer-Avatar
DLeh

@ppumkin erwähnte dies in seinem Kommentar zu dieser Antwort, aber ich wollte es hervorheben, da ich keine anderen Ressourcen zum Einreichen von Daten von einem Behinderten finden konnte <select>. Ich glaube auch, dass es für die Frage relevant ist, da die Auswahl dies nicht ist <input>s, aber sie sind “Eingaben”.

Fügen Sie einfach ein verstecktes Feld für die deaktivierte Auswahl hinzu und alles ist sortiert.

Beispiel:

@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@

Vorsicht: Dadurch werden zwei Tags mit derselben ID auf der Seite platziert, was kein wirklich gültiges HTML ist und mit Javascript Kopfschmerzen verursachen könnte. Für mich habe ich Javascript, um den Wert des Dropdowns durch seinen HTML-Code festzulegen idund wenn Sie das versteckte Feld zuerst setzen, findet das Javascript das anstelle des select.

Wenn ich ein Feld habe, das “schreibgeschützt” ist, aber an den Server zurückgesendet werden muss, mache ich normalerweise die Anzeige deaktiviert (oder einfach Text), füge dann aber ein verstecktes Feld mit demselben Namen hinzu. Sie müssen immer noch sicherstellen, dass das Feld serverseitig nicht tatsächlich geändert wird – aktualisieren Sie es einfach nicht aus dem Modell in Ihrer Aktion – aber der Modellstatus ist immer noch korrekt, wenn Fehler auftreten.

Benutzer-Avatar
Dhaval Pankhaniya

Sie können auch Code wie diesen verwenden, bevor das Formular gesendet wird:

$(":disabled", $('#frmMain')).removeAttr("disabled");

  • Ich habe dies verwendet, muss mich nicht um versteckte Elemente kümmern, bin mir nicht sicher, ob es irgendwelche Nachteile gibt, außer vielleicht eine leichte Verzögerung beim Postback aufgrund der js-Funktion

    – IronHide

    19. April 2016 um 21:58 Uhr


  • Im Gegensatz zu vielen Antworten, die die Verwendung von schreibgeschütztem eher deaktiviertem Text erwähnten, glaube ich, dass wir in vielen Fällen deaktiviert verwenden müssen. Ich habe ungefähr 15 Antworten in ähnlichen Fragen gelesen und dies nur mit einem eigenen jQuery-Filter ausgewählt, um geeignete Elemente zum Entfernen des deaktivierten Attributs auszuwählen, großartig Danke.

    – QMaster

    11. September 2016 um 14:43 Uhr

  • Was ist, wenn Sie mit einreichen? Ajax.BeginForm?

    – markzzz

    28. Mai 2018 um 15:17 Uhr


  • sieht etwas seltsam aus, aber es war die einzige Lösung, die für mich funktioniert hat …

    – AGuyCalledGerald

    31. August 2018 um 7:40 Uhr

  • Absolut geniale Lösung!

    – Joop Stringer

    27. April 2021 um 9:54 Uhr

Benutzer-Avatar
Pirat

Standardmäßig unterstützen Browser das nicht.

Entweder sie machen readonly was das Senden von Werten an den Server ermöglicht oder wenn Sie mit Steuerelementen zu tun haben, mit denen Sie noch verwendbar sind readonly Attribute wie Auswählen, CSS-Stil hinzufügen pointer-events: none; um sie nicht interaktiv zu machen

Irgendwie ein Hack, aber funktioniert! Es funktioniert auch, wenn Sie das Formular direkt mit der Schaltfläche „Senden“ senden, ohne Javascript zu verwenden. Keine zusätzliche Arbeit erforderlich!

Z.B:

<select asp-for="TypeId" 
   asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
   class="form-control form-control-sm" 
   readonly 
   style="pointer-events: none;">
</select>

  • Ich habe dies verwendet, muss mich nicht um versteckte Elemente kümmern, bin mir nicht sicher, ob es irgendwelche Nachteile gibt, außer vielleicht eine leichte Verzögerung beim Postback aufgrund der js-Funktion

    – IronHide

    19. April 2016 um 21:58 Uhr


  • Im Gegensatz zu vielen Antworten, die die Verwendung von schreibgeschütztem eher deaktiviertem Text erwähnten, glaube ich, dass wir in vielen Fällen deaktiviert verwenden müssen. Ich habe ungefähr 15 Antworten in ähnlichen Fragen gelesen und dies nur mit einem eigenen jQuery-Filter ausgewählt, um geeignete Elemente zum Entfernen des deaktivierten Attributs auszuwählen, großartig Danke.

    – QMaster

    11. September 2016 um 14:43 Uhr

  • Was ist, wenn Sie mit einreichen? Ajax.BeginForm?

    – markzzz

    28. Mai 2018 um 15:17 Uhr


  • sieht etwas seltsam aus, aber es war die einzige Lösung, die für mich funktioniert hat …

    – AGuyCalledGerald

    31. August 2018 um 7:40 Uhr

  • Absolut geniale Lösung!

    – Joop Stringer

    27. April 2021 um 9:54 Uhr

Benutzer-Avatar
joetinger

Sie können eine Editor-Vorlage wie die folgende erstellen

CSS

.disabled {
    background-color:lightgray;
}

Editor-Vorlage

@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })

1245450cookie-checkWie übermittle ich deaktivierte Eingaben in ASP.NET MVC?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy