web-dev-qa-db-fra.com

Comment envoyer des entrées désactivées dans ASP.NET MVC?

Comment envoyer des entrées désactivées dans ASP.NET MVC?

85
Sanchitos

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é.

35
Sanchitos

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.

125
Darin Dimitrov

@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.

25
DLeh

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.

18
tvanfosson

Vous pouvez également utiliser un code comme celui-ci avant que le formulaire ne soit envoyé:

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

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 })
6
joetinger

$ ("# 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.

1
Rohan

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

1
Mitesh Patel

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>
0
Dave

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
});
0
flavior

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)
0
Mehmet Taha Meral