it-swarm.com.de

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

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

85
Sanchitos

Danke an alle:

So habe ich das gelöst:

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

Hinweis:

Ich habe diese Informationen über die Antwort erhalten, aber ich wurde gekonnt.

35
Sanchitos

Können Sie nicht das Feld readonly="readonly" anstelle von disabled="disabled" erstellen? Ein Readonly-Feldwert wird an den Server übermittelt, kann jedoch vom Benutzer nicht bearbeitet werden. Ein SELECT-Tag ist jedoch eine Ausnahme.

125
Darin Dimitrov

@ppumkin erwähnte dies in seinem Kommentar zu dieser Antwort aber ich wollte es hervorheben, da ich keine anderen Ressourcen zum Senden von Daten von einem deaktivierten <select> finden konnte. Ich glaube auch, dass es für die Frage relevant ist, da selects nicht <input>s, sondern "input" s sind.

Fügen Sie einfach ein ausgeblendetes Feld für die deaktivierte Auswahl hinzu, und es wird alles sortiert.

Beispiel:

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

Achtung: Dadurch werden auf der Seite zwei Tags mit derselben ID eingefügt. Dies ist kein wirklich gültiger HTML-Code und kann bei Javascript Kopfschmerzen verursachen. Für mich habe ich Javascript gesetzt, um den Wert des Dropdowns durch seine HTML-Variable id festzulegen. Wenn Sie das ausgeblendete Feld zuerst setzen, wird das Javascript anstelle von select gefunden.

25
DLeh

Wenn ich ein Feld habe, das "schreibgeschützt" ist, aber zurück an den Server gesendet werden muss, werde ich normalerweise die Anzeige deaktivieren (oder einfach Text), aber dann ein ausgeblendetes Feld mit demselben Namen hinzufügen. Sie müssen immer noch sicherstellen, dass das Feld auf der Serverseite nicht tatsächlich geändert wird - aktualisieren Sie es in Ihrem Vorgang nicht einfach vom Modell -, aber der Modellstatus ist immer noch genau, wenn Fehler auftreten.

18
tvanfosson

Sie können auch Code wie diesen verwenden, bevor das Formular übermittelt:

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

Sie können eine Editorvorlage wie unten beschrieben erstellen

CSS

.disabled {
    background-color:lightgray;
}

Editor-Vorlage

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

Browser unterstützen dies nicht.

Machen Sie sie entweder zu readonly, wodurch das Senden von Werten an den Server möglich ist, oder fügen Sie den zu erstellenden CSS-Stil pointer-events: none; Hinzu, wenn Sie mit Steuerelementen arbeiten, die noch mit readonly -Attributen wie Select verwendet werden können sie nicht interaktiv

Ein bisschen hacken, aber funktioniert! Dies funktioniert auch, wenn Sie das Formular direkt mit der Schaltfläche "Senden" senden, ohne Javascript zu verwenden. Keine zusätzlichen Arbeiten 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>
3
Dave

$ ("# iD"). attr ("style", "pointer-events: none; hintergrundfarbe: rgb (220,220,220)");

Dies hilft bei der Übermittlung von Modellwerten in asp.net.

1
Rohan

wenn es sich um deaktivierte, aber aktivierte Kontrollkästchen handelt und wir den Wert veröffentlichen möchten, müssen wir sicherstellen, dass unser ausgeblendetes Feld vor dem @ Html.CheckBoxFor ausgeblendeten Feld angezeigt wird.

hier ist der Link, von dem aus ich die Antwort gefunden habe . http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033

1
Mitesh Patel

tasos erweitern '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); Sie können verwenden:

$("#xxxForm").submit(function (e) {
    e.preventDefault();
    var form = this;
    $('#Field1')[0].disabled = false;
    $('#Field2')[0].disabled = false;
    ...
    $('#FieldN')[0].disabled = false;
    form.submit(); // submit bypassing the jQuery bound event
});
0
flavior

Ich verwende diese Methode normalerweise für CheckBox oder CheckBoxFor, da das Deaktivieren den Wert verliert. Readonly funktioniert auch nicht mit dem Kontrollkästchen.

@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
0