Comment soumettre une entrée désactivée dans ASP.NET MVC?
Comment soumettre une entrée désactivée dans ASP.NET MVC?
Réponses:
Tu ne peux pas faire 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 SELECT
balise est cependant une exception.
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
comment puis-je le griser si visuellement il semble qu'il ne soit pas modifiable. Mieux encore, pouvons-nous utiliser quelque chose de similaire à LabelFor, j'ai essayé LabelFor mais il n'obtient que le DisplayName ....
type="checkbox"
entrées
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é modifiée.
textBox.Attributes.Add("readonly", "readonly");
et l'explication est dans le lien
$("#textBoxId").css("color", "#c0c0c0")
.
@ppumkin l'a mentionné 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 d'un handicapé <select>
. Je crois également que cela est pertinent pour la question car les sélections ne sont pas des <input>
s mais ce sont des «entrées».
Incluez simplement un champ masqué pour la sélection désactivée et tout est 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 identifiant, ce qui n'est pas vraiment du HTML valide et pourrait causer des maux de tête avec javascript. Pour moi, j'ai javascript pour définir la valeur de la liste déroulante par son html id
, et si vous mettez le champ caché en premier, le javascript le trouvera à la place du select
.
En règle générale, si j'ai un champ en "lecture seule" mais qui doit être renvoyé au serveur, je rendrai l'affichage désactivé (ou simplement du texte), mais j'ajouterai ensuite un champ caché avec le 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 l'envoi du formulaire:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
De par leur conception, les navigateurs ne prennent pas en charge cela.
Soit faites-les readonly
ce qui permet de soumettre des valeurs au serveur, soit si vous avez affaire à des contrôles qui sont toujours utilisables avec des readonly
attributs tels que Select, ajoutez un style csspointer-events: none;
pour les rendre non interactifs
Une sorte de hack, mais ça marche! Cela fonctionne également lorsque vous soumettez le formulaire directement avec le bouton Soumettre 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>
lorsque nous avons affaire à 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 d'où j'ai trouvé la réponse. http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
expansion de 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
});
Cela aidera à soumettre des valeurs de modèle dans ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
J'utilise généralement cette méthode pour CheckBox ou CheckBoxFor, car le désactiver entraîne la perte de la valeur. Readonly ne fonctionne pas non plus avec la case à cocher.
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
Mettez simplement ce script dans les scripts @section de votre page. cela activera les entrées lorsque vous soumettez la page, et vous devez rediriger l'utilisateur vers une autre page après la soumission.
<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>