2010-03-04 6 views
2

Eh bien, cela doit être facile, mais ...Comment valider qu'un élément de liste déroulante a été sélectionné

J'ai une liste déroulante à mon avis:

<%= Html.DropDownList("ddlDistricts", 
Model.clients.DistrictList,"-- select district --", 
new { @class = "ddltext", style="width: 200px", onchange = "this.form.submit();" }) %> 

Model.clients.DistrictList est de type SelectList. Ce que je veux faire, c'est m'assurer que l'utilisateur sélectionne quelque chose (c.-à-d. «--- select district--», qui a la valeur «», n'est pas sélectionné).

Ainsi, dans le contrôleur je:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(string date, string month, FormCollection form) 
    { 

     if (form["chooseSchool"] == "Submit") // submit button is clicked 
     { 
       if (String.IsNullOrEmpty(form["ddlDistrict"])) 
       { 
        ModelState.AddModelError("ddlDistrict", "Please select a district"); 
       } 
       else 
       { 
        // store some data somewhere ....... 

       } 

     } 

     // create the modelData object ..... 

     return View(modelData); 

    } 

Mais ce qui se passe est qu'il ya une exception objet nul quand il tente de réafficher la vue, apparemment parce que

ModelState [ « ddlDistricts »] Valeur. est null, donc il ne peut pas appliquer ModelState ["ddlDistricts"]. Value.AttemptedValue comme valeur de la liste déroulante.

D'après ce que j'ai lu, en essayant de fournir une valeur à un champ quand ModelState.IsValid est faux, il tente de fournir une valeur pour le contrôle de l'erreur dans cet ordre:

(1) ModelState [ "fieldName"]. Value.AttemptedValue

(2) valeur fournie dans le contrôle explicitement

(3) ViewData

il applique ModelState, mais la propriété de valeur est nulle, donc essayer de accès AttemptedValue gener ates une exception.

Quelle est la réponse à cette question? Comment pouvez-vous vérifier qu'un élément légitime a été sélectionné dans DropDownList?

Je suis sûr que c'est facile, mais je n'arrive pas à le faire en utilisant le schéma de gestion des erreurs ModelState.

Répondre

2
ModelState.AddModelError("ddlDistrict", "Please select a district"); 
ModelState.SetModelValue("ddlDistrict", ValueProvider["ddlDistrict"]); 
+0

Ah ah! Cela semble prometteur .. Je devrai attendre jusqu'à vendredi quand je retournerai au travail pour l'essayer. J'ai vu SetModelValue ici et là, mais je n'ai pas trouvé une très bonne explication. – Cynthia

1

Vous avez une liste déroulante nommée "ddlDistricts" (pluriel) dans la vue mais référence "ddlDistrict" dans votre code. (À moins que ce ne soit une faute de frappe dans le texte de votre question seulement ...)

+0

Oh ouais, c'est juste une faute de frappe ... le code est correct. :) – Cynthia

Questions connexes