2010-09-06 9 views
1

Ceci est probablement simple mais m'a rendu fou. J'ai cherché partout pour cela et trouvé des gens qui l'ont mentionné mais aucune solution fournie.MVC 2 Html CheckBox côté client Validation

J'ai un simple viewmodel qui a une propriété booléenne sans annotation de données, d'autres propriétés le font mais cela n'affecte pas le problème.

Public Property AcceptSurvey As Boolean 

J'ai une vue qui est fortement typée à ce modèle qui fonctionne très bien avec la validation du serveur (à savoir tous les autres validation fonctionne bien et AcceptSurvey est facultative).

<%: Html.CheckBoxFor(Function(x) x.AcceptSurvey)%> 

Quand j'activer la validation du côté client, sur la présentation de la forme (AcceptSurvey n'est pas cochée) Je reçois le message « Le champ AcceptSurvey est nécessaire. ». Je suppose que c'est parce que la validation ne voit qu'une valeur (true) lorsque la case est cochée. Je me rends compte que l'aide de CheckBoxFor rend un champ caché (même attribut de nom et une valeur de faux) et a pensé que c'était pour combattre ceci. Si je rend la propriété nullable je ne peux pas utiliser CheckBoxFor, je peux utiliser EditorFor mais cela se traduit par une liste déroulante avec trois propriétés (pas ce que je veux) et la validation côté client fonctionne très bien.

Suis-je stupide? BTW J'utilise MVC JQuery pour le côté client.

Répondre

1

Je ne sais pas quelle est la bonne réponse à cette question, mais cela a fonctionné pour moi. J'utilise MVC 2.0 et j'ai donc créé des modèles d'affichage partagés & pour le type de données booléen. Je montre les valeurs booléennes comme une liste déroulante à deux choix au lieu d'une case à cocher.

Une autre option aurait été d'avoir cette même approche, mais dans le modèle de l'éditeur, créez un champ masqué et faites en sorte que les événements checkbox définissent/réinitialisent la valeur du champ caché. J'ai commencé avec ceci, mais les utilisateurs ont préféré l'approche déroulante de toute façon.

/Views/Shared/EditorTemplates/Boolean.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %> 
<% 
    var items = new List<SelectListItem>(); 
    items.Add(new SelectListItem(){ 
      Text = @"No", 
      Value = @"false", 
      Selected = (Model == false) 
    }); 
    items.Add(new SelectListItem(){ 
      Text = @"Yes", 
      Value = @"true", 
      Selected = (Model == true) 
    }); 
%> 
<%: Html.DropDownList("", items) %> 

/Views/Shared/EditorTemplates/Boolean.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %> 
<%: Model ? @"Yes" : @"No" %> 
Questions connexes