2011-08-17 4 views
2

J'ai un formulaire et le seul élément requis est le nom du client. Donc, dans mon modèle, j'ai:ASP.NET MVC 3 ModelState.IsValid retourne toujours vrai pour les données codées JSON en utilisant Ext.Direct

[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 en affichant les données au format Json et les données sont postées avec succès.

enter image description here

Quand je mets 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 le ModelState.IsValid est vrai.

enter image description here

Maintenant, pour quelques-unes des choses que j'ai essayé:

  1. J'ai inséré le code suivant, juste avant de vérifier ModelState.IsValid, afin de veiller à ce que CustomerName = null

    customerOrderModel.CustomerOrderHeader.CustomerName = null;

  2. J'ai essayé d'utiliser TryUpdateModel (customerOrderModel) mais je reçois le message d'erreur suivant:

    TryUpdateModel a lancé une exception de type 'System.MissingMethodException'

  3. J'ai essayé de modifier les données JSON donc que la "racine" "CustomerOrderHeader" a été renommée "customerOrderModel" pour correspondre au paramètre.

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

EDIT pour counsellorBen

enter image description here

EDIT 2 pour counsellorben

enter image description here

+0

Ok J'ai trouvé la réponse qui est détaillée ici http://stackoverflow.com/questions/4465432/asp-net-mvc-2-controllers-tryvalidate-doesnt-validate-the-list-items-within/ 4489226 # comment10011080_4489226. – DavidS

Répondre

0

Le problème est que lorsque vous essayez de lier une réponse JSON, le nom de la variable dans votre action de contrôleur doit correspondre au nom de la variable transmise 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", afin que le nom corresponde au nom de la variable dans votre action.

+0

J'ai ajouté une section d'édition dans l'OP contenant une image. C'est ce que tu veux dire? Parce que si c'est le cas, cela ne fonctionne toujours pas. – DavidS

+0

D'oh! J'ai regardé le Json retourné, et j'ai manqué qu'il soit enveloppé dans un élément "data". Soit (1) supprimez l'enveloppe de données, soit (2) supprimez l'élément "customerOrderModel" et renommez votre variable dans votre action en "données". – counsellorben

+0

J'ai suivi les conseils 2 comme vous pouvez le voir dans le montage. J'ai mis à jour mon code côté serveur, mais cela ne fonctionne toujours pas. – DavidS

Questions connexes