web-dev-qa-db-fra.com

Valider le format de date en Mvc

J'ai une propriété ExpiredDate définir dans MVC

[Required]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
        public DateTime? ExpirationDate { get; set; }

Je souhaite valider si la date sur une page n'est pas au bon format. Le format de la date que j'utilise est MM/dd/yyyy.

15
Abhishek

Vous devez utiliser l'attribut DataType avec (DataType.Date . Les deux sont dans l'espace de noms System.ComponentModel.DataAnnotations et peuvent être utilisés comme ceci:

[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? ExpirationDate { get; set; }

Cette réponse comprend également quelques autres attributs.

Mise à jour : pour activer la validation côté client dans ASP.NET MVC4, vous devez procéder comme suit:

  1. Ajoutez le plugin jquery.validation au pied de page

    <%: Scripts.Render("~/Scripts/jquery.validate.min.js") %>
    <%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %>
    
  2. Ajoutez ceci à web.config

    <appSettings>
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    
  3. Utilisez ce CSS lorsque vous utilisez @Html.ValidationMessageFor() afin qu'il soit initialement masqué et s'affiche via la validation javascript

    /* styles for validation helpers */
    .field-validation-error {
        color: #e80c20;
        font-weight: bold;
    }
    
    .field-validation-valid {
        display: none;
    }
    
    input.input-validation-error {
        border: 1px solid #e80c20;
    }
    
    input[type="checkbox"].input-validation-error {
        border: 0 none;
    }
    
    .validation-summary-errors {
        color: #e80c20;
        font-weight: bold;
        font-size: 1.1em;
    }
    
    .validation-summary-valid {
        display: none;
    }
    
24
truemedia

Le format de date de validation personnalisé doit être résolu manuellement.

Des problèmes de validation client peuvent survenir en raison d'un bogue MVC (même dans MVC 5) dans jquery.validate.unobtrusive.min.js qui ne fait pas accepter le format date/datetime de quelque façon que ce soit. Il n'est pas causé par Datepicker ni par les navigateurs. Malheureusement, vous devez le résoudre manuellement.

Ma solution enfin fonctionnelle:

Vous devez inclure avant:

@Scripts.Render("~/Scripts/jquery-3.1.1.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/moment.js")

Vous pouvez installer moment.js en utilisant:

Install-Package Moment.js

Et puis vous pouvez enfin ajouter un correctif pour l'analyseur de format de date:

$(function () {
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
    }
});
9
lukyer