2013-05-15 14 views
12

Mam właściwość ExpiredDate określić w MVCWaliduj DateFormat w MVC

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

Chcę Weryfikacja jeśli data na stronie nie jest w odpowiednim formacie. Format daty, której używam, to MM/dd/yyyy.

+2

MVC zweryfikuje według mrówczan domyślnie, jeśli trzeba poprawności po stronie klienta, trzeba włączyć dyskretny javascript na ciebie aplikacji – Rab

+0

Ustaw właściwość 'ApplyFormatInEditMode' na' true' w 'DisplayFormatAttribute' – asawyer

+0

@asawyer Sir nie sprawdza poprawności i odświeżania strony. Chcę zatrzymać odświeżenie strony i chcę wyświetlić komunikat o formacie. – Abhishek

Odpowiedz

18

powinien zawierać atrybut DataType z DataType.Date. Można je znaleźć zarówno w przestrzeni nazw System.ComponentModel.DataAnnotations.

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

This answer zawiera również kilka dodatkowych atrybutów.

Updated zawierać instrukcje, aby umożliwić sprawdzanie poprawności po stronie klienta w ASP.NET MVC4

Aby włączyć sprawdzanie poprawności po stronie klienta, trzeba się do tego:

  1. Dodaj wtyczki jquery.validation do stopki

    <%: Scripts.Render("~/Scripts/jquery.validate.min.js") %> 
    <%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %> 
    
  2. Dodaj to do web.config

    <appSettings> 
        <add key="ClientValidationEnabled" value="true" /> 
        <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    
  3. Użyj tego css przy użyciu @ Html.ValidationMessageFor() tak, że jest initally ukrytych i wyświetla za pomocą walidacji javascript

    <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

Aby włączyć sprawdzanie poprawności po stronie klienta, wystarczy dodać wtyczkę jquery.validate do stopki w ten sposób: '<%: Scripts.Render (" ~/Scripts/jquery.validate.min.js ")%><%: Scripts. Renderowanie ("~/Scripts/jquery.validate.unobtrusive.min.js")%> ' – truemedia

+0

Sir @truemedia, próbowałem tego kodu [Wymagane (ErrorMessage =" ss ")] [DataType (DataType.Date) ] [DisplayFormat (ApplyFormatInEditMode = true, DataFormatString = "{0: MM/dd/rrrr}")] public DateTime? date {get; zestaw; } – Abhishek

+0

strona wciąż odświeżenia, nawet jeśli nie zawiera żadnej daty, a także odświeżenie postów, gdy wstawię prostą liczbę całkowitą 345 – Abhishek

-4

Można używać walidacji jak:

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

myślę, że będzie to działało

+0

Brak odświeżania strony sir, jeśli wpisuję 12345 i przesyłam formularz lub jakąkolwiek niepoprawną datę. – Abhishek

4

data walidacji Niestandardowy format musi być rozwiązany ręcznie.

zagadnienia walidacji Klient może wystąpić z powodu błędu MVC (nawet w MVC 5) w jquery.validate.unobtrusive.min.js który nie akceptują format daty/datetime w żaden sposób. Nie jest to spowodowane datepicker ani przeglądarek. Niestety musisz rozwiązać go ręcznie.

My wreszcie rozwiązanie działa:

Trzeba to wcześniej:

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

Można zainstalować chwilę.JS przy użyciu:

Install-Package Moment.js 

A potem można w końcu dodać poprawkę dla formatu daty parsera:

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

Gdzie umieścisz ostatni fragment kodu? – w0051977

+0

na przykład w ... ... – lukyer

+0

to rozwiązać mój dzień. Dzięki @lukyer! – ClownCoder

Powiązane problemy