La liaison de modèle dans Net Core sur une propriété appelée newuserid ne fonctionne pas

la programmation


C’est un problème très étrange sur lequel je me bats depuis 2 ou 3 jours. J’utilise une application Web Net Core 6.0 MVC.

Dans mon modèle de vue, j’ai une propriété comme celle-ci :

public class ConfirmCodeViewModel
{
...
public long NewUserId { get; set; }
...
}

Le modèle est rempli, est passé dans une vue et cette valeur est conservée dans une entrée cachée dans un formulaire, tout cela est très standard :

@model ConfirmCodeViewModel
...
<form asp-action="ConfirmCode" method="post">
...
<input type="hidden" asp-for="NewUserId" />
...
</form>

Lorsque le formulaire est POSTé, NewUserId revient à zéro, il n’y a aucune entrée pour celui-ci dans les données du formulaire publiées et il n’est donc pas lié au modèle entrant.

Si je change le nom de la propriété en UserId

public long UserId { get; set; }

Ensuite, il se lie et revient correctement.

Le modèle est reçu dans l’action ainsi :

public async Task<IActionResult> ConfirmCode(ConfirmCodeViewModel inputModel)

Tous les autres modèles possédant des propriétés se lient correctement.

Cela résout le problème, mais j’aimerais quand même savoir pourquoi cela ne fonctionne pas avec la propriété nommée NewUserId.

Merci beaucoup pour toute contribution.

PS Toutes mes excuses si le formatage du code est un peu bancal, mon incompétence !

Ce que j’ai essayé :

J’ai essayé de changer le type en chaîne

public string NewUserId { get; set; }

Mais cela n’a pas fonctionné non plus.

J’ai inspecté la collection Request.Form entrante et aucun élément appelé NewUserId n’est renvoyé.

J’ai vérifié la vue pour m’assurer qu’il n’y a pas d’élément en double avec le même identifiant.

J’ai vérifié (en utilisant JS) que la valeur EST définie dans la vue.

Le POST n’est en aucun cas intercepté (par exemple par JS).

Solution 1

À mon avis, la chose la plus évidente à rechercher est le nom de la propriété attendue côté serveur de l’appel POST. Vérifiez s’il s’appelle NewUserId ou non. Je soupçonne qu’il s’appelle en fait UserId que vous récupérez lorsque vous envoyez la valeur. Si la propriété s’appelle UserId et que vous souhaitez toujours utiliser NewUserId localement, vous pouvez toujours décorer la propriété avec le nom que vous attendez de l’autre côté (cet exemple utilise NewtonSoft).

C#
[JsonProperty("UserId")]
public long NewUserid { get; set; }

コメント

タイトルとURLをコピーしました