2 votes

ASP.NET MVC 3 ModelState.IsValid renvoie toujours true pour les données encodées en JSON en utilisant Ext.Direct

J'ai un formulaire et le seul élément requis est le nom du client. Dans mon modèle, j'ai donc :

 [DisplayName("Customer name*:")]
 [Required]
 public string CustomerName
 { get; set; }

Auparavant, je faisais un post HTML et tout fonctionnait bien, y compris la validation.

Maintenant, j'ai "ajaxifié" le formulaire, en utilisant Ext.direct.mvc ( http://code.google.com/p/ext-direct-mvc/ ), ce qui est un fait significatif, et l'affichage des données au format Json et les données sont affichées avec succès.

enter image description here

Lorsque je place un point d'arrêt dans mon code (actuellement modifié à des fins de débogage) :

 [DirectInclude]
    [HttpPost]
    public ActionResult SaveOrUpdateOrderLines(CustomerOrderModel customerOrderModel)
    {

        if (!ModelState.IsValid)
        {
            return ModelState.JsonValidation();
        }

        return null;

Je vois que le CustomerOrderModel.CustomerOrderHeader.CustomerName = ""

enter image description here

Mais ModelState.IsValid est vrai.

enter image description here

Voici maintenant quelques-unes des choses que j'ai essayées :

  1. J'ai inséré le code suivant, juste avant la vérification de ModelState.isValid, afin de m'assurer que CustomerName = null

    customerOrderModel.CustomerOrderHeader.CustomerName = null ;

  2. J'ai essayé d'utiliser TryUpdateModel(customerOrderModel) mais j'obtiens le message d'erreur suivant :

    TryUpdateModel a généré une exception de type 'System.MissingMethodException'

  3. J'ai essayé de modifier les données json pour que le "Root" "CustomerOrderHeader" soit renommé en "customerOrderModel" pour correspondre au paramètre.

Rien de tout cela n'a fonctionné. Alors, qu'est-ce que je peux bien faire de mal pour que la validation ne fonctionne plus ? Quelles mesures puis-je prendre pour déboguer le problème ?

EDIT pour le conseillerBen

enter image description here

EDIT 2 pour counsellorben

enter image description here

0voto

counsellorben Points 7865

Le problème est qu'en essayant de lier une réponse Json, le nom de la variable dans l'action de votre contrôleur doit correspondre au nom de la variable passée du côté client. Votre modèle est valide, car CustomerOrderHeader est null.

Dans votre script client, vous devez envelopper votre modèle entier dans un élément nommé "customerOrderModel", de sorte que le nom corresponde au nom de la variable dans votre action.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X