2013-05-15 6 views
12

ich eine Eigenschaft ExpiredDate haben definieren in MVCValidate Date In Mvc

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

ich überprüfen möchten, ob das Datum auf einer Seite ist nicht in der richtigen Format. Das Format des Datums, das ich verwende, ist MM/dd/yyyy.

+2

MVC nach Format standardmäßig validiert werden, wenn Sie die Client-seitige Validierung benötigen, müssen Sie sich auf unaufdringliche drehen javascript on you application – Rab

+0

Setzen Sie die 'ApplyFormatInEditMode' Eigenschaft auf' true' im 'DisplayFormatAttribute' – asawyer

+0

@asawyer Sir es Validieren und Seitenpostback nicht. Ich möchte das Postback anhalten und die Formatnachricht anzeigen. – Abhishek

Antwort

18

Sie sollten das DataType Attribut mit DataType.Date umfassen. Diese können beide im Namespace System.ComponentModel.DataAnnotations gefunden werden.

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

This answer enthält auch einige weitere Attribute.

aktualisiert Anweisungen sind clientseitige Validierung in ASP.NET MVC4

Um die clientseitige Validierung zu ermöglichen, Sie dies zu aktivieren müssen:

  1. die jquery.validation Plugin hinzufügen in die Fußzeile

    <%: Scripts.Render("~/Scripts/jquery.validate.min.js") %> 
    <%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %> 
    
  2. Fügen Sie diese

    web.config
    <appSettings> 
        <add key="ClientValidationEnabled" value="true" /> 
        <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    
  3. verwenden CSS, wenn @ Html.ValidationMessageFor() verwendet, so dass es initally und Displays über die JavaScript-Validierung versteckt

    <style type="text/css"> 
    
    /* 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; 
    } 
    
    </style> 
    
+0

Um die clientseitige Validierung zu aktivieren, fügen Sie einfach das jquery.validate-Plugin folgendermaßen in Ihre Fußzeile ein: '<%: Scripts.Render (" ~/Scripts/jquery.validate.min.js ")%><%: Skripte. Rendern ("~/Scripts/jquery.validate.unobtrusive.min.js")%> ' – truemedia

+0

Sir @truemedia, ich habe diesen Code versucht [Erforderlich (ErrorMessage =" ss ")] [DataType (DataType.Date) ] [DisplayFormat (ApplyFormatInEditMode = true, DataFormatString = "{0: MM/TT/JJJJ}"]] public DateTime? Datum {erhalten; einstellen; } – Abhishek

+0

die Seite noch postback, auch wenn es kein Datum und auch Postback enthält, wenn ich eine einfache Ganzzahl 345 setzen – Abhishek

-4

können Sie verwenden Validierung wie:

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

ich denke, es wird funktionieren

+0

Nein Sir Seite Postback, wenn ich 12345 und senden Sie das Formular oder ein ungültiges Datum eingeben. – Abhishek

4

Angepasste Validierung Datumsformat manuell gelöst werden müssen.

Client-Validierungsprobleme können aufgrund von MVC Fehler auftreten (auch in MVC 5) in jquery.validate.unobtrusive.min.js die nicht Datum/datetime-Format in irgendeiner Weise akzeptieren. Es wird weder von Datepickern noch von Browsern verursacht. Leider müssen Sie es manuell lösen.

Meine endlich Arbeitslösung:

Sie müssen gehören vor:

@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") 

Sie Moment installieren können.js verwenden:

Install-Package Moment.js 

Und dann kann man endlich fix für das Datumsformat-Parser hinzufügen:

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

Wo setzt du das letzte Code-Fragment? – w0051977

+0

zum Beispiel in ... ... – lukyer

+0

Das ist mein Tag lösen. Danke @lukyer! – ClownCoder