2009-08-04 5 views
2

J'ai presque terminé mon premier site mvc asp.net mais je n'étais pas satisfait de la robustesse de la validation.asp.net mvc ajouter des causes de validation Modèle à être nul

i lire sur la validation puis ajouté le code ci-dessous pour mon action Edit dans mon UsersController:

if (user_.firstname.Trim().Length == 0) 
     { 
      ModelState.AddModelError("firstname", "First Name is required."); 
      return View(); 
     } 

je viens de faire un test sur ce sujet et je suis maintenant à obtenir des erreurs à mon avis où le modèle est nul. Donc, dans le modèle ci-dessus est null, donc je reçois une exception sur Model.loginName. aucune idée de ce qui se passe ici. Si je supprime le code ci-dessus (la validation) tout fonctionne bien. (Sauf que je peux ensuite mettre les déchets dans ma base de données.

Répondre

4

Voir ma réponse sur un sujet similaire.

Validating form using ModelState

Chaque fois que vous ajoutez une erreur de modèle à l'ModelState et appelez la vue encore, la cadre asp.net MVC tente de rechercher la valeur tentée aussi votre vue doit retourner l'objet user_ à votre vue fortement typé

if (user_.firstname.Trim().Length == 0) 
{ 
    ModelState.AddModelError("firstname", "First Name is required."); 
    ModelState.SetModelValue("firstname", ValueProvider["firstname"]); 

    return View(user_); 
} 
+0

Il y a une discussion similaire ici- http://forums.asp.net/p/1377232/2900140.aspx#2900140 – RichardOD

0

Dans votre contrôleur, vous devez ajouter des méthodes surchargées:..

public ViewResult UpdateUser() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult UpdateUser(user data) 
    { 
     if (user_.firstname.Trim().Length == 0) 
     { 
      ModelState.AddModelError("firstname", "First Name is required."); 
      return View(); 
     } 
     return View(); 
    } 

Avec cette solution modèle dans la deuxième méthode ne sera pas nulle

1

Vous obtenez un modèle d'erreur nul parce que vous n'êtes pas passer d'un modèle à la vue ... est-il quelque chose qui vous empêche de faire juste ça?

E.g. Bien que cela devrait fonctionner comme un travail autour ... vous devriez vraiment bien regarder comment fonctionne votre validation. La validation devrait vraiment être faite ailleurs que sur le contrôleur, par exemple, j'ai mis toute ma validation dans le modèle lui-même.

1

J'ai ajouté le modèle dans la méthode de retour et maintenant il a commencé à fonctionner.

Merci pour la réponse.

return Voir (contactToEdit);