ASP

2012-02-21 17 views
25

'da dinamik olarak oluşturulmuş öğelere jQuery validator kurallarının eklenmesi MVC3 projesindeki bir sayfaya dinamik olarak eklenmiş form alanlarım var. Normalde jQuery doğrulama sunucu tarafını ekleyeceğiz, ancak bu durumda (UI'daki birden fazla alan bir gizli alan için değer üretiyor) ve bu gönderilemedi.ASP

$container.find(".date").rules("add", { 
    required: true, 
    messages: { 
     required: "The date is required" 
    } 
}); 

Ama o değil: alanlar dinamik olarak sayfaya eklendikten sonra bu yüzden yerine kullanıcı görebilirsiniz alanları için UI okunur doğrulama)

eklemelisiniz, ben konteyner üzerinde aşağıdaki kodu çalıştırın Çalışın! Garip bir şekilde, yukarıdaki kodu devre dışı bırakmak, dinamik öğeleri oluşturmak, daha sonra tarayıcı JS konsolunda çalışan kod çalışır, ancak sadece varsayılan doğrulama mesajı gösterir.

Kaybettim. Herhangi bir fikir?

jQuery Doğrulama kullanıyorum 1.9.0 & mütevazi eklentisi bakılırsa bu her form elemanına birkaç özelliklerini ekleyerek HTML çoğunlukla yapılabilir gibi

cevap

6

(ki Anladığım kadarıyla, ASP.NET ile ilgilidir. Burada yapmanız gerekenler:

Yeni elemanınızı ekledikten sonra, $.validator.unobtrusive.parseElement(newElement)'u arayın ve forma eklenecektir. Cevabınız önerildiği gibi, veri formu ve veri-değerli-gerekli nitelikleri yeni form öğesinde ayarlamanız gerekir.

Yani bununla sona:

//create new form element 
$('form fieldset').append('<br>New Field: '+ 
    '<input type="text" data-val="true" data-val-required="A date is required." name="newField">'+ 
    ' * Also required'); 

//add new rules to it 
$.validator.unobtrusive 
    .parseElement($('form').find('input[name="newField"]').get(0)); 

burada Gösterilen: bir editör arayüzüne yeni kısmi manzarasını enjekte ederken http://jsfiddle.net/ryleyb/LNjtd/2/

+0

Ah, güzel! Bunu yapmak için özel bir yöntem yapabilir ve seçili alandaki veri niteliklerini bir kerede ekleyebilirim. –

+4

JSFiddle'da bile çalışmıyor. – Gabriel

51

:

  • A name öznitelik
  • data-val="true"
  • data-val-required="message"

böylece gibi:

<input type='text' name="date" data-val="true" data-val-required="A date is required." /> 

Ardından formu sadece JS yoluyla yeniden ayrıştırılması gerekir:

//Remove current form validation information 
$("form") 
    .removeData("validator") 
    .removeData("unobtrusiveValidation"); 

//Parse the form again 
$.validator 
    .unobtrusive 
    .parse("form"); 
+1

5.5 yıl sonra hala bir şampiyon gibi çalışır. – Tommy

1

seni daha basit bir şey yanlış olduğunu düşünüyorum - sizin find('.date') gibi aslında bulgu değildi şey. Çünkü aksi takdirde, kodun bana göre oldukça makul görünüyor. http://jsfiddle.net/ryleyb/LNjtd/

Bununla doğru kodu doğrulamak başardı: Burada beklendiği gibi çalışma örneğidir Ben şeylerin Unobtrusive eklenti tarafı ile oluyor anlıyorum ki

$('form fieldset') 
    .append('<br>New Field: <input type="text" name="newField"> * Also required') 
    .find('input[name="newField"]').rules('add', { 
     required: true, 
     messages: { 
     required: 'New field is required' 
     } 
    } 
);​ 
+0

Doğru, ancak Etkileyici Doğrulama eklentisine bir başvuru eklemediniz - sorunun nerede olduğu anlaşılıyor. Bunu dahil etmek için güncelledim: http: // jsfiddle.net/LNjtd/1/ –

+0

Huh, sadece bu değil, ben size yanlış jsfiddle için bağlantı gönderdi :) – Ryley

+0

Ama aynı zamanda, ben göze çarpmayan eklenti ile ilgili değildi ve ASP.NET hakkında bir şey bilmiyorum formlarını üretir ve sonra kullanır ... yani evet, kendi başınasın, ve çalışabilir bir çözüm bulmuş gibisin. – Ryley