2010-05-09 10 views
27

Ana görünümde görüntülenen kısmi görünümüm var. Kısmi görünüm System.ComponentModel.DataAnnotations ve Html.EnableClientValidation()'dan yararlanır.Bir kullanıcı bir formu geçersiz hale getirdiğinde iptal düğmesine tıklandığında MVC istemci tarafı doğrulama hatalarını nasıl temizlerim?

bir bağlantı tıklatıldığında ve kısmi görünüşünü içeren div JQuery.Dialog() içinde gösterilir.

Doğrulanmış giriş alanımda herhangi bir metin girmeden kaydet düğmesine tıklıyorum. Bu, istemci tarafı doğrulamasının beklendiği gibi yanmasına neden olur ve geçersiz alanın yanındaki '* zorunlu' mesajını görüntüler. iptal düğmesi tıklandığında

, bunu varsayılan eyalet geri istemci tarafı MVC doğrulama sıfırlamak ve kullanıcı tekrar iletişim açtığında hazır herhangi bir mesaj, kaldırmak istiyorum. Bunu yapmanın önerilen bir yolu var mı?

+0

kullanabilirsiniz Kullanıcı Düzenle düğmesini tıkladığında yeni bir tane. Bu noktada, MVC doğrulaması zaten varsayılan durumda olmalıdır. Eğer değilse (diğer bir deyişle iletişim kutusuyla ilişkilendirilmiş temel DOM nesneleri hala son İletişim Çağrısı çağrısından veri içerir), doğru yolu DOM nesnelerinden gelen değerleri temizlemektir. –

cevap

38

Bu yanıt MVC3 içindir. aşağıdaki yorum yardım için MVC 4 ve bunu güncellenmesi Bkz 5 onlar şöyle javascript ile bunu yapabilir kullanıcıya gösterilmez bu yüzden sadece doğrulama-iletileri silmek istiyorsanız

:

function resetValidation() { 
     //Removes validation from input-fields 
     $('.input-validation-error').addClass('input-validation-valid'); 
     $('.input-validation-error').removeClass('input-validation-error'); 
     //Removes validation message after input-fields 
     $('.field-validation-error').addClass('field-validation-valid'); 
     $('.field-validation-error').removeClass('field-validation-error'); 
     //Removes validation summary 
     $('.validation-summary-errors').addClass('validation-summary-valid'); 
     $('.validation-summary-errors').removeClass('validation-summary-errors'); 

    } 

Eğer pop-up içinden sadece çalışmak için reset gerekiyorsa bunu şöyle yapabiliriz:

function resetValidation() { 
     //Removes validation from input-fields 
     $('#POPUPID .input-validation-error').addClass('input-validation-valid'); 
     $('#POPUPID .input-validation-error').removeClass('input-validation-error'); 
     //Removes validation message after input-fields 
     $('#POPUPID .field-validation-error').addClass('field-validation-valid'); 
     $('#POPUPID .field-validation-error').removeClass('field-validation-error'); 
     //Removes validation summary 
     $('#POPUPID .validation-summary-errors').addClass('validation-summary-valid'); 
     $('#POPUPID .validation-summary-errors').removeClass('validation-summary-errors'); 

    } 

Bu aradığınız etkisidir umuyoruz.

+0

Cevabınız için teşekkür ederiz. Benzer bir çözümü hayata geçirdim, ancak ek bir sorun ortaya çıkardı, iptal düğmesine tıklandığında, metin kutusu odağı kaybeder ve onaylamayı yeniden başlatır! İletişim kutusu kapatılmadan önce hata mesajının göründüğünü görüyorsunuz. Bu problemi çözmenin tek yolu, diyaloğun pencerenin içine, JQuery.Ajax çağrısıyla, pop tarafından kullanılan DIV'ye kısmi görünümü almak için enjekte edilmesidir. Bu şekilde, diyalog kapalı olduğunda, 'persistans' kaybolur. –

+0

"Sıfırlama" işlevini çağırmadan önce odağı metin kutusundan kaldırdınız mı? Yoksa kurulumunda bir şey mi eksik? – Falle1234

+1

Bu yöntemi bir MVC 4 uygulamasında kullandım, ancak görüntülenen doğrulama hatalarını bıraktı. $ ('. Validation-summary-errors li') 'yi ekleyerek, bu sorunu gideren yöntemin üst kısmına remove(); '. – AaronSieb

1

Teşekkür ederim. Biraz farklı bir senaryo için benzer bir sorum vardı. Gönder düğmelerinden birine tıkladığınızda bir dosyayı indirdiği bir ekranım var. MVC'de indirilmek üzere bir dosya döndürdüğünüzde, ekranları değiştirmez, bu nedenle doğrulama özetinde bulunan tüm hata iletileri sonsuza kadar orada kalır. Form tekrar gönderildikten sonra hata iletilerinin burada kalmasını istemiyorum. Ancak, aynı zamanda, gönder düğmesine tıklandığında istemci tarafında yakalanan alan düzeyinde doğrulamaları temizlemek istemiyorum. Ayrıca, bazı görüşlerimin üzerinde birden fazla form var. Benim görünümleri için geçerli böylece

Ben Site.Master sayfanın alt kısmında aşağıdaki kodu (sayenizde) eklendi.

<!-- This script removes just the summary errors when a submit button is pressed 
    for any form whose id begins with 'form' --> 
<script type="text/javascript"> 
    $('[id^=form]').submit(function resetValidation() { 
     //Removes validation summary 
     $('.validation-summary-errors').addClass('validation-summary-valid'); 
     $('.validation-summary-errors').removeClass('validation-summary-errors'); 
    }); 
</script> 

Tekrar teşekkürler.

+0

Şimdi bir yıl sonra ve projeyi VS 2010'a yükselttim MVC3 ve Razor.Bazı nedenlerden dolayı MVC3 artık HTML.BeginForm() yardımcı işlevini varsayılan olarak kullanırken "id = 'form0'" etiketini koymuyor. Her Html.BeginForm() 'da yeni bir {id =' form0 '} yapmak zorundasınız ya da ClientValidationEnabled öğesini true olarak ayarlamanız ve UnobtrusiveJavaScriptEnabled değerini false değerine ayarlamanız gerekiyor. Sonunda yaptığım şey, jQuery selektörünü sadece çalışmak için değiştirmektir. aşağıdaki gibi bir form etiketi "$ ('form'). submit (function resetValidation() {" –

1

Bunu yapmak için doğrulama kitaplığı yöntemlerine dokunabilirsiniz. İki ilgi alanı vardır: FormContext ve FieldContext. FormContext aracılığıyla, fields özelliği aracılığıyla formun __MVC_FormValidation özelliği ve doğrulanmış özellik başına bir FieldContext aracılığıyla erişebilirsiniz.

Yani, doğrulama hataları temizlemek için, bir form böyle bir şey yapabilirsiniz:

var fieldContexts = form.__MVC_FormValidation.fields; 
for(i = 0; i < fieldContexts.length; i++) { 
    var fieldContext = fieldContexts[i]; 
    // Clears validation message 
    fieldContext.clearErrors(); 
} 
// Clears validation summary 
form.__MVC_FormValidation.clearErrors(); 

Sonra hangisi olay ihtiyacımız kod parçası kanca.Bu (oldukça belgesiz) içgörü için

Kaynaklar:

(javascript aracılığıyla istemci tarafında doğrulama tetiklemek için nasıl metions this link, işaret için)
16

MVC ile gelen dikkat çekici bir doğrulama kullanıyorsanız aşağıdakileri yapabilirsiniz:

$.fn.clearErrors = function() { 
    $(this).each(function() { 
     $(this).find(".field-validation-error").empty(); 
     $(this).trigger('reset.unobtrusiveValidation'); 
    }); 
}; 

--------------------------------------------- ---------------------------

Üçüncü Parti Düzenleme: Bu, çoğunlukla benim durumumda çalıştı, ama mecburdum $(this).find(".field-validation-error").empty(); satırını kaldırın. Bu, yeniden gönderirken doğrulama mesajlarının yeniden gösterilmesini etkiliyor gibi görünüyordu. Böyle denir sonra

$.fn.clearErrors = function() { 
     $(this).each(function() { 
      $(this).trigger('reset.unobtrusiveValidation'); 
     }); 
    }; 

ve:

aşağıdaki kullanılan mesajın, renkli arka plan dahil doğrulama eserler açık tamamlamak için

$('#MyFormId input').clearErrors(); 
2
function resetValidation() { 

    $('.field-validation-error').html(""); 

} 
0

giriş alanı ve giriş alanı etrafındaki renkli anahatta, aşağıdaki kodu kullanmam gerekiyordu, bu durumda (benim durumumda), gömülü bir form içeren bir Bootstrap modal iletişim kutusu. İşte

$(this).each(function() { 
    $(this).find(".field-validation-error").empty(); 
    $(this).find(".input-validation-error").removeClass("input-validation-error"); 
    $(this).find(".state-error").removeClass("state-error"); 
    $(this).find(".state-success").removeClass("state-success"); 
    $(this).trigger('reset.unobtrusiveValidation'); 
}); 
0

Eğer inşa etmenizi gerektirecektir JQuery Dialog, görevden ne İptal düğmesini tıklamak kaldırmak sadece hata mesajı

$('.field-validation-valid span').html('') 

VEYA

$('.field-validation-valid span').text('') 

enter image description here

İlgili konular