Comment envoyer des entrées désactivées dans ASP.NET MVC?
Merci à tout le monde:
La façon dont j'ai résolu ceci:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Remarque:
J'ai eu cette information sur la réponse mais j'ai été édité.
Ne pouvez-vous pas créer le champ readonly="readonly"
au lieu de disabled="disabled"
? Une valeur de champ en lecture seule sera soumise au serveur tout en restant non modifiable par l'utilisateur. Une balise SELECT
est cependant une exception.
@ppumkin a mentionné cela dans son commentaire sur cette réponse , mais je voulais le souligner car je ne pouvais pas trouver d'autres ressources sur la soumission de données à partir d'un <select>
désactivé. Je pense également que cela est pertinent pour la question, car les sélections ne sont pas des <input>
s mais des "entrées".
Il suffit d’inclure un champ masqué pour la sélection désactivée et son trié.
Exemple:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
Attention: cela mettra deux balises sur la page avec le même ID, ce qui n'est pas vraiment un code HTML valide et pourrait causer des maux de tête avec javascript. Pour moi, javascript permet de définir la valeur de la liste déroulante par son code html id
, et si vous mettez le champ masqué en premier, le javascript le trouvera au lieu de select
.
En règle générale, si j'ai un champ en lecture seule qui doit être soumis au serveur, l'affichage sera désactivé (ou simplement du texte), mais j'ajouterai un champ masqué du même nom. Vous devez toujours vous assurer que le champ n'est pas réellement modifié côté serveur - ne le mettez pas à jour à partir du modèle dans votre action - mais l'état du modèle sera toujours précis s'il y a des erreurs.
Vous pouvez également utiliser un code comme celui-ci avant que le formulaire ne soit envoyé:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Vous pouvez créer un modèle d’éditeur comme celui ci-dessous
CSS
.disabled {
background-color:lightgray;
}
Modèle d'éditeur
@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })
$ ("# iD"). attr ("style", "événements de pointeur: aucun; couleur d’arrière-plan: rgb (220, 220, 220)");
Cela aidera à soumettre les valeurs de modèle dans asp.net.
lorsque nous traitons avec des cases à cocher désactivées mais cochées et que nous voulons publier la valeur, nous devons nous assurer que notre champ masqué apparaît avant le champ masqué @ Html.CheckBoxFor.
voici le lien à partir duquel j'ai trouvé la réponse . http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
De par leur conception, les navigateurs ne le supportent pas.
Faites-les readonly
qui permet de soumettre des valeurs au serveur .__ ou utilisez des contrôles qui sont toujours utilisables avec l'attribut readonly
tels que Select, ajoutez css style pointer-events: none;
pour les rendre non interactifs.
Une sorte de bidouille, mais ça marche! Cela fonctionne également lorsque vous soumettez un formulaire directement avec le bouton Envoyer sans utiliser javascript. Aucun travail supplémentaire requis!
Par exemple:
<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>
développer Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); vous pouvez utiliser:
$("#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
});
J'utilise habituellement cette méthode pour CheckBox ou CheckBoxFor car le rendre désactivé provoque la perte de la valeur. Readonly ne fonctionne pas non plus sur la case à cocher.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)