Come si invia un input disabilitato in ASP.NET MVC?
Come si invia un input disabilitato in ASP.NET MVC?
Risposte:
Non puoi fare il campo readonly="readonly"
invece di disabled="disabled"
? Un valore di campo di sola lettura verrà inviato al server pur non essendo modificabile dall'utente. SELECT
Tuttavia, un tag è un'eccezione.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
come posso disattivarlo in modo tale che visivamente sembra che non sia modificabile. Meglio ancora possiamo usare qualcosa di simile a LabelFor, ho provato LabelFor ma ottiene solo DisplayName ....
type="checkbox"
input
Grazie a tutti:
Il modo in cui ho risolto questo:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Nota:
Ho ricevuto queste informazioni sulla risposta ma sono stato modificato.
textBox.Attributes.Add("readonly", "readonly");
e la spiegazione è nel link
$("#textBoxId").css("color", "#c0c0c0")
.
@ppumkin lo ha menzionato nel suo commento su questa risposta, ma volevo evidenziarlo perché non sono riuscito a trovare altre risorse sull'invio dei dati da un disabile <select>
. Credo anche che sia rilevante per la domanda in quanto le selezioni non sono <input>
s ma sono "input".
Basta includere un campo nascosto per la selezione disabilitata ed è tutto ordinato.
Esempio:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Attenzione: questo metterà due tag sulla pagina con lo stesso ID, che non è veramente HTML valido e potrebbe causare mal di testa con javascript. Per me, ho javascript per impostare il valore del menu a discesa dal suo html id
, e se metti prima il campo nascosto, il javascript lo troverà invece del select
.
In genere, se ho un campo di "sola lettura" ma deve essere reinviato al server, disabiliterò la visualizzazione (o semplicemente testo), ma poi aggiungerò un campo nascosto con lo stesso nome. Devi comunque assicurarti che il campo non sia effettivamente modificato sul lato server - semplicemente non aggiornarlo dal modello nella tua azione - ma lo stato del modello sarà comunque accurato se ci sono errori.
Puoi anche utilizzare un codice come questo prima che il modulo venga inviato:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
In base alla progettazione, i browser non lo supportano.
Creali readonly
che consentano di inviare valori al server o se hai a che fare con controlli che sono ancora utilizzabili con readonly
attributi come Seleziona, aggiungi lo stile CSS pointer-events: none;
per renderli non interattivi
Una specie di hack, ma funziona! Funziona anche quando invii il modulo direttamente con il pulsante di invio senza utilizzare javascript. Nessun lavoro extra richiesto!
Per esempio:
<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>
quando abbiamo a che fare con caselle di controllo disabilitate ma selezionate e vogliamo pubblicare il valore, dobbiamo assicurarci che il nostro campo nascosto appaia prima del campo nascosto @ Html.CheckBoxFor.
di seguito è riportato il link da cui ho trovato la risposta. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
espansione di Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); Puoi usare:
$("#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
});
Ciò aiuterà a inviare i valori del modello in ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
Di solito uso questo modo per CheckBox o CheckBoxFor perché disabilitarlo sta causando la perdita del valore. Sola lettura non funziona nemmeno sulla casella di controllo.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Metti semplicemente questo script negli script @section nella tua pagina. questo abiliterà gli input quando invii la pagina e dovresti reindirizzare l'utente a un'altra pagina dopo l'invio.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
if ($('form').valid()) {
$("input").removeAttr("disabled");
}
});
</script>