Erreur lors de l'affectation de null à un intendant null - "La valeur 'null' n'est pas valide pour la propriété"
J'ai cette propriété, à mon avis, modèle:
[DisplayName("Region")]
public int? RegionId { get; set; }
Je passe mon point de vue, le modèle de mon contrôleur, et il ne parvient pas à ModelState.IsValid
si RegionId est null. Si je passe un entier, il fonctionne très bien.
Le message d'erreur est:
La valeur 'null' est pas valide pour la Région
J'ai aussi essayé d'appeler avant de me vérifier ModelState.IsValid
mais j'obtiens le même message d'erreur:
if (viewModel.RegionId == null)
viewModel.RegionId = (int?)null;
Quel est le problème ici? Pourquoi ne puis-je pas affecter null à quelque chose qui est nullable?
source d'informationauteur Steven
Vous devez vous connecter pour publier un commentaire.
Dans votre Global.asax.cs fichier, dans la méthode Application_Start, ajoutez la ligne suivante:
Le problème est que, même pour un nullable type de la valeur, par défaut, une "obligation" attribut est ajouté par défaut ValidatorProvider.
Voici une autre explication possible.
Je suis AJAX Affichage d'un MVC méthode d'action à l'aide de jQuery comme suit:
jQuery va tourner à l'objet de données dans une chaîne de requête. J'utilise le modèle de classeur par défaut de pousser les valeurs dans mon ViewModel. La validation du modèle échoue avec "La valeur 'null' n'est pas valide pour nom de champ". Mais la propriété est nullable int. Après l'inspection de la raw POST, je trouve que l'objet de données que j'ai écris est sérialisé dans une chaîne de requête qui ressemble à ceci:
et non pas de ce:
Donc la validation du modèle est compréhensible de se plaindre au sujet de l'attribution de la chaîne de caractères littérale 'null', à mon nullable int. Une solution est de vérifier pour les valeurs Null avant de Poster. Je souhaite que j'aie eu le temps de creuser plus, mais je viens de passé à l'envoi d'une représentation JSON de l'objet de données qui gère correctement les valeurs null.
Voir ici: ModelState la validation échoue pour des types nullables
La chaîne de la valeur "null" peut être transmis. Dans mon scénario, j'ai mis à jour sur une chaîne vide "", et résolu cette erreur.
Je pense que le problème n'est pas d'affectation de la valeur null, c'est que les consommateurs ne contient pas de code à l'exception d'une valeur null. La mission est parfaitement valide (bien que votre null check est inversé, et le casting est redondant).
Que d'un côté vous pouvez utiliser
HasValue
pour vérifier la valeur null sur un type nullable. Bien que, en réalité, c'est pas différent de null vérifier, regarde juste un peu plus propre:J'ai le sentiment que le problème se situe quelque part de l'exemple de code que vous avez indiqué. J'ai créé un exemple d'application qui crée un formulaire et a nullable champ, mais il fonctionne comme prévu. Je voudrais commencer à éliminer les autres variables de votre installation jusqu'à ce que vous pouvez pour un travail ViewModel avec un nullable de la propriété, et vous devriez être en mesure d'identifier ce qui est à l'origine du problème.
J'ai eu un problème avec cela.
Mon problème c'est que j'ai été réglage de la délinquance de la propriété null explicitement dans le POST. Donc, semblable à ce que vous avez, la demande ai regardé comme:
Dans mon cas, c'était aussi simple que l'omission de la déclaration explicite (par exemple, ne pas dire que c'est nul, il suffit de ne pas envoyer de données)