3
votes

Pourquoi mes cases à cocher ne transmettent-elles pas leur valeur à mon contrôleur dans ASP.NET Core?

Je pense que c'est peut-être une solution facile, mais je n'arrive pas à la contourner. J'ai une application Web ASP.NET Core et j'utilise un formulaire ajax pour soumettre des données à mon contrôleur pour traitement. Le problème que j'ai est que mes cases à cocher passent toujours comme "fausses" même si elles peuvent être cochées.

J'ai cherché des réponses mais rien de ce que j'ai essayé n'a fonctionné. Des choses comme utiliser la propriété vérifié , s'assurer que le nom est correct.

Quelqu'un peut-il expliquer pourquoi les valeurs sont ignorées lorsque le formulaire est soumis au contrôleur et comment je peux le résoudre?

Formulaire

<input type="checkbox" class="custom-control-input" id="ColType" value="true" data-val="true" data-val-required="The ColType field is required." name="ColType">
<input type="hidden" value="false" id="ColType" name="ColType">

Modèle

<input asp-for="@Model.ColType" type="checkbox" />


3 commentaires

car les cases à cocher non cochées ne sont pas publiées par le navigateur. vous devez publier un champ masqué supplémentaire, voir stackoverflow.com/questions/1809494/ … et stackoverflow.com/questions/2697299/...


Est-il possible que vous les publiez en tant que application / x-www-form-urlencoded alors que l'application attend application / json ?


Avez-vous trouvé une solution?


3 Réponses :


1
votes

Si vous n'utilisez pas l'attribut asp-for , vous pouvez modifier vos codes pour ajouter un champ masqué. Il sera soumis que la case soit cochée ou non. Si la case est cochée, la valeur publiée sera true, false. Le classeur de modèle extraira correctement true de la valeur. Sinon, ce sera faux:

<input type="checkbox" class="custom-control-input" data-val="true" id="ColName" name="ColName" value="true" checked>
<label class="custom-control-label" for="ColName">Name</label>
<input name="ColName" type="hidden" value="false">


0 commentaires

3
votes

Comme vous utilisez ASP.NET Core, il est recommandé d'utiliser les Tag Helpers :

<div class="form-group">
    <label asp-for="@Model.ColName"></label>
    <input asp-for="@Model.ColName" type="checkbox" />
</div>


0 commentaires

0
votes

J'ai rencontré un problème similaire. Nous avons un formulaire qui contient de nombreux champs qui incluent des zones de texte, des menus de sélection (déroulants), des cases à cocher et bien sûr des étiquettes. Tous les champs sont correctement enregistrés dans la base de données SAUF pour les trois options de case à cocher que nous avons. Je viens de trouver le correctif après l'avoir trompé pendant des semaines. J'espère que cela aidera quelqu'un:

Voici à quoi ressemblait le code:

$('form').on('change', ':checkbox', function () {
    if (this.checked) {
        $(this).val(true);
    }
    else {
        $(this).val(false);
    }
});

C'est ce qui a résolu le problème:

$(this).val(true);


0 commentaires