J'ai quelques entrées désactivées dans un formulaire et je souhaite les envoyer à un serveur, mais Chrome les exclut de la demande.
Existe-t-il une solution de contournement sans ajouter de champ caché?
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<!-- this does not appear in request -->
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
</form>
Les éléments avec l'attribut Désactivé ne sont pas soumis ou vous pouvez dire que leurs valeurs ne sont pas publiées (voir la deuxième puce de l'étape 3 de la spécification pour la construction du jeu de données de formulaire ).
C'est à dire.,
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
Pour votre information,
Vous pouvez utiliser l'attribut readonly
dans votre cas, ce qui vous permettra de publier les données de votre champ.
C'est à dire.,
<input type="textbox" name="Percentage" value="100" readonly="readonly" />
Pour votre information,
En utilisant Jquery et en envoyant les données avec ajax, vous pouvez résoudre votre problème:
<script>
$('#form_id').submit(function() {
$("#input_disabled_id").prop('disabled', false);
//Rest of code
})
</script>
Pour publier les valeurs des entrées désactivées en plus des entrées activées, vous pouvez simplement réactiver toutes les entrées du formulaire lors de sa soumission.
<form onsubmit="this.querySelectorAll('input').forEach(i => i.disabled = false)">
<!-- Re-enable all input elements on submit so they are all posted,
even if currently disabled. -->
<!-- form content with input elements -->
</form>
Si vous préférez jQuery:
<form onsubmit="$(this).find('input').prop('disabled', false)">
<!-- Re-enable all input elements on submit so they are all posted,
even if currently disabled. -->
<!-- form content with input elements -->
</form>
Pour ASP.NET MVC C # Razor, vous ajoutez le gestionnaire de soumission comme suit:
using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post,
// Re-enable all input elements on submit so they are all posted, even if currently disabled.
new { onsubmit = "this.querySelectorAll('input').forEach(i => i.disabled = false)" } ))
{
<!-- form content with input elements -->
}
Si vous devez absolument désactiver le champ et transmettre les données, vous pouvez utiliser un javascript pour saisir les mêmes données dans un champ masqué (ou simplement définir le champ masqué également). Cela vous permettrait de le désactiver mais de toujours publier les données même si vous publiez sur une autre page.
Je mets à jour cette réponse car c'est très utile. Il suffit d'ajouter en lecture seule à l'entrée.
Donc, le formulaire sera:
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<input type="textbox" name="Percentage" value="100" readonly/>
</form>
Je trouve que cela fonctionne plus facilement. en lecture seule le champ de saisie, puis appelez-le pour que l’utilisateur final sache qu’il est en lecture seule. les entrées placées ici (à partir de AJAX par exemple) peuvent toujours être soumises, sans code supplémentaire.
<input readonly style="color: Grey; opacity: 1; ">
Sémantiquement, cela ressemble au comportement correct
Je me demanderais " Pourquoi dois-je soumettre cette valeur? "
Si vous avez une entrée désactivée sur un formulaire, alors vous ne voulez probablement pas que l'utilisateur modifie la valeur directement
Toute valeur affichée dans une entrée désactivée doit être soit
En supposant que le serveur qui traite le formulaire soit identique à celui qui le sert, toutes les informations permettant de reproduire les valeurs des entrées désactivées doivent être disponibles lors du traitement.
En fait, pour préserver l’intégrité des données - même si la valeur de l’entrée désactivée a été envoyée au serveur de traitement, vous devriez vraiment la valider.Cette validation nécessiterait le même niveau d'informations que vous auriez besoin de reproduire les valeurs de toute façon!
Je dirais presque que les entrées en lecture seule ne doivent pas être envoyées dans la requête
Heureux d'être corrigé, mais tous les cas d'utilisation je peux penser à la soumission d'entrées en lecture seule/désactivées ne sont en réalité que des problèmes de style déguisés