Comment puis-je activer/désactiver discrète de validation sur afficher/masquer via jquery?

Mise à jour:
Ce que je demande est de savoir si il est possible de supprimer des règles de validation, qui sont déduites à partir d'Attributs sur les champs de mon viewmodel, sur le côté client SEULEMENT.

--

Je suis basculement de l'affichage de certains champs, lorsqu'un choix est fait à partir d'une liste déroulante. J'ai besoin de passer à la validation.

ViewModel.cs:

public int ddlTypeID { get; set; }
public Dictionary<int, string> ddlTypes { get; set; }

[Required(ErrorMessageResourceName = "msgRequired",
    ErrorMessageResourceType = typeof(Resources.Globals))]
public DateTime firstDate {get; set;}

[Required(ErrorMessageResourceName = "msgRequired",
    ErrorMessageResourceType = typeof(Resources.Globals))]
public DateTime otherDate {get; set;}

Créer.cshtml:

<script type="text/javascript">
    $(document).ready(function () {
       $('.optional').hide();
       $('#ddlTypeID').change(function () {
            var id = $(this).val();
            if (id == 1) {
                $('.optional').show();
            } else {
                $('.optional').hide();
            }
        });
    });
</script>

@using (Html.BeginForm())
{
    <div class="editor-field">
        @Html.DropDownListFor(x=>x.ddlTypeID, new SelectList(Model.ddlTypes,"Key","Value",Model.ddlTypeID),Resources.Globals.msgType)
        @Html.ValidationMessageFor(model => model.ddlTypeID)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.firstDate )
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.firstDate )
        @Html.ValidationMessageFor(model => model.firstDate )
    </div>

    <div class="editor-label optional">
        @Html.LabelFor(model => model.otherDate )
    </div>
    <div class="editor-field optional">
        @Html.EditorFor(model => model.otherDate )
        @Html.ValidationMessageFor(model => model.otherDate )
    </div>

    <input type="submit" value="Save" />
}

Cela fonctionne pour masquer/afficher les champs pour otherDate - mais comment puis-je basculer la validation en même temps? Ou est-il une meilleure façon de le faire?

Ce n' "activer / désactiver la validation"?
Je pense qu'il veut l'activer/la désactiver pour les champs indiqués.
Droit: si les champs sont cachés, alors j'ai besoin de désactiver les validateurs. Lorsque les champs sont affichés, j'ai besoin de ré-activer.
Ce qui se fait sur le serveur de validation? Comment comptez-vous gérer cela? Le serveur sait très peu de choses que vous utilisé du javascript pour afficher/masquer certaines parties de votre DOM. À partir du serveur de point de vue à la fois les champs sont requis dans votre application actuelle. Vous devez toujours d'abord résoudre le serveur de côté les problèmes de validation avant même de penser à la validation côté client. La validation côté Client est juste un bonus que vous pouvez vivre sans.
Côté serveur est fait, assez simple puisque j'ai la ddlTypeId. Les champs ne sont pas requis dans la base de données. J'ai seulement besoin de gérer le côté client.

OriginalL'auteur chris | 2012-02-29