2009-11-30 9 views
0

J'ai un simple pour avec au champ de texte où l'utilisateur entre l'adresse d'un flux RSS. Je ne vais pas agir si le champ est vide, ceci est mon balisage:ASP.NET MVC Échec de la validation simple de mon formulaire

<%=Html.ValidationSummary() %> 
    <table> 
     <tr> 
      <td> 
       Feed Url: 
      </td> 
      <td> 
       <%=Html.TextBox("url", null, new {@style="width:300px"}) %> 
      </td> 
     </tr></table> 

Mon contrôleur est également très simple:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult AddFeed(FormCollection collection) 
    { 
     string url = collection.Get("url"); 
     string roles = collection.Get("Roles"); 
     if (string.IsNullOrEmpty(url)) 
     { 
      ModelState.AddModelError("url", "Please provide a propre feed url"); 
     } 
     if (string.IsNullOrEmpty(roles)) 
     { 
      ModelState.AddModelError("Roles", "Please select a valid role"); 
     } 
     if (ModelState.IsValid) 
     { 
      Session["url"] = url; 
      Session["Roles"] = roles; 
      return RedirectToAction("ValidateFeed"); 
     } 
     else 
     { 
      return View(); 
     } 
    } 

Quand il échoue, il recharge la vue et fait une exception dans la ligne où il rend ma zone de texte, en disant qu'il y a eu une exception de pointeur nul. Ce qui m'a vraiment botheres, il devrait être si simple ... mais im aux prises

/H4mm3r

Modifier S'il vous plaît ne pas tenir compte de l'élément Rôles sa chute vers le bas que je l'ai, mais retiré de balisage pour la simplicité

Répondre

0

Je pense que vous ne pouvez pas utiliser le ModelSate comme ça si vous ne l'avez pas quelque chose comme:

UpdateModel(collection); 

ou

TryUpdateModel(collection); 

ou par liaison de paramètres

public ActionResult AddFeed(YourModelType collection) 

Parce que le ModelState est associé à aucun modèle.

Comme la référence MSDN dit:

ModelState Classe

encapsule l'état de modèle se liant à une propriété d'un argument action méthode , ou à l'argument lui-même.

0

Vous ne pouvez probablement pas utiliser null lors de l'utilisation de l'assistant HTML. Essayez ceci dans votre formulaire à la place:

<%= Html.TextBox("url", String.Empty, new {@style="width:300px"}) %> 

Je ne l'ai pas testé, mais c'est la première chose que je voudrais essayer, étant donné que message d'erreur.

+0

Essayé :-) pas de chance :-(Pensez "Omar" a un point dans sa réponse, en essayant notre maintenant – H4mm3rHead