2012-09-26 21 views
5

Bir Datetime özelliğinden oluşturulan öğe için "data-vald-date" html özniteliğinin oluşturulmasını nasıl önleyebilirim?ASP.NET MVC 4, datetime için veri tarihinin üretilmesini önler

modeli:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

görünüm: Aslında

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

, ben vermeyin hangi, doğum tarihi seçmek için üç açılır listeler elemanı kuruyorum bir tarih biçiminde değer. Gördüğüm bazı çözümler, bir çalışma etrafında oluşuyordu: doğrulama bir javascript ile kaldırılıyor. Öngörülmekte olduğum çözüm, DateTime özelliğini her değer için (gün, ay, yıl) üç uzunluğa ayırmaktır. Tarihi-doğrulamak için doğrulama sistemi tarafından

cevap

0

veri geçerlilik tarihi kullanılır. Bunu kaldırırsanız, istemci tarafı doğrulaması çalışmaz.

İstediğiniz şey buysa, yalnızca istemci tarafı doğrulamasını devre dışı bırakın.

+0

Hızlı cevabınız için teşekkürler. İstemci doğrulamasını devre dışı bırakmak her öğe üzerinde etkili olur mu? Benim tarafımda, üç değerimi içeren ve datetime değerini değiştiren yeni bir nesne seçiyorum. – bado

+0

@bado - Üzgünüm, ne demek istediğini anlamadım. –

+0

Kesin olmalıyım, sadece web teknolojilerinden başlıyorum. İstemci doğrulama işlemini devre dışı bırakırsam, tüm veri değerlerinin (formdaki tüm öğelerin) hiçbir etkisi olmayacak mıyım? – bado

12

Tamam, bu bana bir öğleden sonra bir iş çıkardı ... görünüşe göre mvc4, bir data-val-date = "Message" öğesinin görüntü modelinde EVERY datetime özelliği üzerinde işlem yapma zamanı olduğuna karar verdi. Bu varsayılan davranışı değiştirmeyi denedim, ancak başarılı olmadı.

Bu

sorunlarımı çözdü:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

Ayrıca paylaşılan EditorFor klasöründe "DateTime.cshtml" adlı kendi editörü şablonu yazmak için deneyebilirsiniz, ama bu biridir, çünkü orada TextBoxFor kullanmayın de kirlenmiş.

+0

Bu çözümü tercih ediyorum, çünkü yalnızca sorunun nedenini devre dışı bırakıyor. İstemci tarafı doğrulaması daha iyi bir kullanıcı deneyimi sağlar ve sunucunuza post-back'leri azaltır, böylece her şeyi devre dışı bırakmaktan kaçınılmalıdır. –

+0

hala kullanışlıdır + 1ed – user2695433

0

Bunu, uygulamanıza global.asax dosyanızdan başlayın ve formu tetikleyin.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;