2009-06-02 28 views
64

Bir metin kutusunda bir tarihi doğrulamak için ASP.NET RangeValidator kullanmaya çalışıyorum. Metin kutusuna girilen tarihin biçimi dd MMMM yyyy'dur.ASP.NET doğrulayıcısı ile tarih doğrulaması

Geçerli bir tarihi doğrulamak için aralık doğrulayıcıyı nasıl kullanabilirim? 1 Ocak 1000'u en az veya en çok değer olarak girersem, değeri türüne dönüştürülemeyen bir hata alıyorum, ancak başka bir biçim kullanırsam girilen metni geçersiz olarak alır.

<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> 
+0

Biçimi doğrulamaya çalışıyor musunuz? çünkü problemini anlamadım? – TStamper

cevap

126

iyi seçenek

bir web formuna doğrulayıcı karşılaştırmak ekle olacaktır:

Aşağıda benim kodudur. ControlToValidate değerini ayarlayın. Type özelliğini Date olarak ayarlayın. DataTypeCheck ör olan operatör özelliğini ayarlayın:

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

Basit ve zarif. Ayrıca, yerleşik kontroller geçerli/geçersiz yıl sonları tarihlerini de kontrol eder. 2/29/2011 geçersiz ama 2/29/2012 geçerli geri geliyor. Fantezi düzenli ifadelerle uğraşmaya gerek yok! –

+6

@Shoban - Tarih formatımın 'DD/AA/YYYY' olup olmadığı nedir? –

+1

@Ryan Sammut Ayrıca bu sorunun cevabını bilmek istiyorum. Tarih türü CompareValidator, MM/DD/YY'yi kabul eder. 2 basamaklı yıl değerini hariç tutmak istiyorum. – danyim

2

Ben tarihleri ​​Uygulamanın geçerli kültüründe belirtilmesi gerekmektedir inanıyoruz. CultureInvariantValues ayarını doğru olarak denemek ve sorununun çözülüp çözülmediğine bakmak isteyebilirsiniz. Aksi halde, istediğiniz kültürü elde etmek için mevcut kültür (veya culture'un kendisi) için DateTimeFormat'u değiştirmeniz gerekebilir.

24

A CustomValidator de burada çalışacak:

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

kod arkadaki:

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); 
} 
+0

Yönteminizi denedim, ancak bir güncelleme panelinde başarısız oldu. Pls chk: http://stackoverflow.com/questions/2071585/asp-net-custom-validation-not-working-even-when-required-field-validator-is-use/14361135#14361135 –

+1

Bu en iyi yoldu Benim için en kolay ve arkasındaki kodda kontrol edilen ve yapılan şey üzerinde tam kontrole sahibim. Thnx bir sürü Chris! – user1501127

+1

Bu, datetime alanlarını da kullanan eski sistemler için SQL tarih aralığı düzenlemeleri için yararlıdır. Teşekkürler. –

7

aşağıdaki bunu yapmanın en kolay yolu olduğunu düşünüyorum.

<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> 
İlgili konular