2011-04-14 4 views
3

J'utilise MVC 3 avec le rasoir comme moteur de vue et la validation client discrète activée.Activer la validation dans MVC 3 Razor

J'essaye de créer un formulaire où l'utilisateur a un groupe de boutons radio pour choisir leur méthode préférée de contact - téléphone ou email. En fonction de l'option sélectionnée, je souhaite afficher la zone de texte appropriée, mais également activer/désactiver le validateur requis pour la zone de texte appropriée.

Mon balisage ressemble à ceci au moment (débutant avec MVC si s'il vous plaît signaler toute erreur évidente):

<div id="prefferedContact"> 
    <p>Preferred Contact Method *</p> 
     <input type="radio" id="contactMethodEmail" name="PreferredContactMethod" value="email" @if (Model.PreferredContactMethod != "phone"){<text>checked="checked"</text>} /> <label for="contactMethodEmail">by email</label> 
     <input type="radio" id="contactMethodPhone" name="PreferredContactMethod" value="phone" @if (Model.PreferredContactMethod == "phone"){<text>checked="checked"</text>} /> <label for="contactMethodPhone">by phone</label> 
    </div> 
    <div id="contactMethodDetails" class="formItem"> 
     <div id="emailAddressBox"> 
      @Html.LabelFor(x => x.Email, "Email address") 
      @Html.TextBoxFor(x => x.Email, new { @class = "textbox" }) 
     </div> 
     <div id="phoneNumberBox"> 
      @Html.LabelFor(x => x.PhoneNumber, "Phone number") 
      @Html.TextBoxFor(x => x.PhoneNumber, new { @class = "textbox" }) 
      </div> 
     </div> 
    </div> 
</div> 

Il y a une fonction jquery qui ajoute un événement onclick aux boutons radio pour basculer entre les deux cases en fonction de la valeur sélectionnée.

Le modèle - pour ces champs spécifiques - n'a pas de validation requise pour le moment mais est correct. En outre, la validation travaille sur d'autres domaines comme prévu

je vraiment juste besoin d'avoir une idée de:

(a) est-il possible de passer la validation et hors
(b) est l'impact du ModelState validation en tout cas (ou dois-je le personnaliser)

J'avais aussi pensé à avoir une seule zone de texte pour les données de contact, mais je voulais avoir une validation d'expression régulière pour l'email et pour le numéro de téléphone séparément. Si je devais avoir une seule zone de texte, pourrais-je changer les règles de validation sur la zone de texte en fonction de l'option sélectionnée ???

Espérons que c'est assez clair avec suffisamment d'informations.

Merci

Joel

Répondre

1

Vous pouvez effectuer une validation au niveau de la classe si vous avez besoin d'appliquer des règles basées sur des propriétés multiples:

http://weblogs.asp.net/scottgu/archive/2010/12/10/class-level-model-validation-with-ef-code-first-and-asp-net-mvc-3.aspx

Class-level validation

Malheureusement, cela semble pour travailler seulement côté serveur, de sorte que vous auriez à mettre en œuvre validat côté client personnalisé ion.

Une autre option serait d'avoir deux modèles différents, un pour chaque scénario (avec des propriétés communes dans une classe de base), mais cela pourrait être un peu plus compliqué.