Validarea datei cu validatorul ASP.NET (Programare, Asp.Net, Validare)

Nicholas a intrebat.

Încerc să folosesc un validator ASP.NET RangeValidator pentru a valida o dată pe o casetă de text. Formatul datei introduse pe caseta de text este următorul dd MMMM yyyy.

Cum pot folosi validatorul de intervale pentru a valida o dată validă? Dacă introduc 1 ianuarie 1000 ca valoare minimă sau maximă, primesc o eroare care spune că valoarea nu poate fi convertită în tipul de dată, dar dacă folosesc un alt format, textul introdus este considerat invalid.

Mai jos este codul meu:

<asp:TextBox 
    runat="server" 
    ID="txtDatecompleted" 
/>
<cc2:CalendarExtender
    ID="datecompletedExtender" 
    runat="server"
    TargetControlID="txtDatecompleted"
    Format="dd MMMM yyyy"
/>  
<asp:RangeValidator 
    runat="server" 
    ID="RangeValidator1" 
    Type="Date" 
    ControlToValidate="txtDatecompleted" 
    MaximumValue="9999/12/28" 
    MinimumValue="1000/12/28" 
    ErrorMessage="enter valid date" 
    Display="None"
/>
<cc2:ValidatorCalloutExtender 
    ID="RangeValidator1_ValidatorCalloutExtender" 
    runat="server"
    Enabled="True"
    TargetControlID="RangeValidator1">
</cc2:ValidatorCalloutExtender>

Comentarii

  • Încerci să validezi formatul? pentru că nu înțeleg problema ta? –  > Por TStamper.
4 răspunsuri
Shoban

Cea mai bună opțiune ar fi

Adăugați un validator de comparare la formularul web. Setați controlul său controlToValidate. Setați-i proprietatea Type la Date. Setați-i proprietatea operator la DataTypeCheck, de exemplu:

<asp:CompareValidator
    id="dateValidator" runat="server" 
    Type="Date"
    Operator="DataTypeCheck"
    ControlToValidate="txtDatecompleted" 
    ErrorMessage="Please enter a valid date.">
</asp:CompareValidator>

Comentarii

  • Simplu și elegant. În plus, controalele încorporate verifică și datele valide/invalide ale anului bisect. 2/29/2011 spune invalid, dar 2/29/2012 revine valid. Nu este nevoie să vă chinuiți cu expresii regulate sofisticate! –  > Por Dillie-O.
  • @Ryan Sammut Și eu vreau să aflu răspunsul la această întrebare. Tipul Date CompareValidator acceptă MM/DD/AA. Vreau să exclud valoarea de 2 cifre a anului. –  > Por danyim.
  • Rețineți că CompareValidator depinde de cultură, așa că, dacă doriți un alt format de dată (de exemplu, dd-mm-yyyy), trebuie doar să setați cultura în mod corespunzător.  > Por Richard.
  • Acest lucru funcționează, dar avertismentul este că acest lucru permite date care pot fi în afara intervalului de date SQL mai mici decât 1753 sau puteți avea un interval de date (fără intrări de date viitoare). Acest lucru funcționează, dar este posibil să fie nevoie de Chris Van Opstal’s pentru editarea datelor SQL. –  > Por Charles Byrne.
  • Acest lucru nu va funcționa pentru întrebarea adresată din cauza formatului de dată specificat ca fiind „dd MMMM yyyy”. CustomValidator pe date funcționează numai dacă data este în format „dd/mm/aaaa” (pentru en-GB) sau „mm/dd/aaaa” pentru (en-US). –  > Por Fandango68.
Chris Van Opstal

Un CustomValidator personalizat ar funcționa și aici:

<asp:CustomValidator runat="server"
    ID="valDateRange" 
    ControlToValidate="txtDatecompleted"
    onservervalidate="valDateRange_ServerValidate" 
    ErrorMessage="enter valid date" />

Code-behind:

protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args)
{
    DateTime minDate = DateTime.Parse("1000/12/28");
    DateTime maxDate = DateTime.Parse("9999/12/28");
    DateTime dt;

    args.IsValid = (DateTime.TryParse(args.Value, out dt) 
                    && dt <= maxDate 
                    && dt >= minDate);
}

Comentarii

  • Am încercat metoda ta, dar nu a reușit în cadrul unui panou de actualizare. Pls chk: stackoverflow.com/questions/2071585/… –  > Por Yoosaf Abdulla.
  • Acesta a fost cel mai bun mod pentru mine, cel mai simplu și am control total asupra a ceea ce este verificat&făcut în codul din spate. Thnx alot Chris!!! –  > Por user1501127.
  • Acest lucru funcționează bine pentru editarea intervalului de date SQL pentru sistemele vechi care utilizează și câmpurile de datetime. Mulțumiri. –  > Por Charles Byrne.
Cherian Paul

Cred că următorul este cel mai simplu mod de a face acest lucru.

<asp:TextBox ID="DateControl" runat="server" Visible="False"></asp:TextBox>
<asp:RangeValidator ID ="rvDate" runat ="server" ControlToValidate="DateControl" ErrorMessage="Invalid Date" Type="Date" MinimumValue="01/01/1900" MaximumValue="01/01/2100" Display="Dynamic"></asp:RangeValidator>

tvanfosson

Cred că datele trebuie să fie specificate în cultura curentă a aplicației. S-ar putea să doriți să experimentați cu setarea CultureInvariantValues la true și să vedeți dacă acest lucru vă rezolvă problema. În caz contrar, este posibil să trebuiască să modificați DateTimeFormat pentru cultura curentă (sau culture însăși) pentru a obține ceea ce doriți.