2011-08-10 15 views
13

MVC3 üzerinde çalışmak için doğrulama alma konusunda bir sürü sorun yaşıyorum. Sadece doğrudan sayfasını yüklemek zaman iyi çalışır, ama jquery AJAX POST kullandığınızda o doğrulamaz:JQuery ajax post üzerinde mvc 3 ile göze batmayan doğrulama çalışma sorun mu yaşıyorsunuz

<form action="/DartsMVC/Restaurant/Edit/13" method="post"> 
    <fieldset> 
     <legend>Restaurant</legend> 

     <input data-val="true" data-val-number="The field RestaurantID must be a number." data-val-required="The RestaurantID field is required." id="RestaurantID" name="RestaurantID" type="hidden" value="13"> 

     <div class="editor-label"> 
      <label for="Name">Name</label> 
     </div> 
     <div class="editor-field"> 
      <input class="text-box single-line" data-val="true" data-val-required="The Name field is required." id="Name" name="Name" type="text" value="furaibo"> 
      <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span> 
     </div> 

     <p> 
      <input type="submit" value="Save" class="ui-button ui-widget ui-state-default ui-corner-all" role="button" aria-disabled="false"> 
     </p> 
    </fieldset> 
</form> 

AJAX POST:

Bu form $('#modal-dialog').load('/DartsMVC/Restaurant/Edit/13') kullanılarak yüklenir, bu hale HTML formu/gönderimi arayarak kullanılır. İleti tamamlandıktan sonra kalıcı iletişim kutusu açılır ve kapanır. Bu yazıyı göndermeden önce formu doğrulamak istiyorum:

// force change the submit data to an ajax POST (usually 'save', 'delete' button) 
$('#modal-dialog').delegate('form', 'submit', function (e) { 
    e.preventDefault(); 
    var form = $(this); 
    form.validate(); // does nothing 
    if (form.valid()) { 
     $.ajax({ 
      url: form.attr('action'), 
      type: "POST", 
      data: form.serialize(), 
      success: function (data) { 
       $('#modal-dialog').dialog('close'); 
      }, 
      error: function (jqXhr, textStatus, errorThrown) { 
       alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')"); 
      } 
     }); 
    } 
}); 

Bunu yaparak bir şey mi kırdım? .valid() her zaman doğru döner.

My sayfa kaynak vardır:

Benim web.config sahiptir

<link href="/DartsMVC/Content/themes/cupertino/jquery-ui-1.8.14.custom.css" rel="stylesheet" type="text/css"> 

<script src="/DartsMVC/Scripts/modernizr-1.7.min.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script> 

<script src="/DartsMVC/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery.validate.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script> 

Ve modeli vardır:

[Required] 
    public string Name { get; set; } 

daha araştırmadan sonra, ben olabilir düşünüyorum Dinamik kontrollerle ilgili bir şey:

cevap

26

$ .validator.unobtrusive.parse çağrılması

Çözüldü ($ ('form')) did hile. Validator dinamik içerik için yeniden yaratılması gerekiyor sanırım

+0

Teşekkürler! Bunu bir süre önce anladım, ama forogt ve çözümü tekrar bulmakta zorlandım. –

+0

@juhan_h Kodunuzda $ .validator kodunu yukarıdan nereden ararsınız. Benzer bir sorun olabilir: fonksiyonunu (formToAdd) { \t \t \t jQuery.each (formToAdd: '// mütevazi doğrulama \t \t addValidationToForm yeniden başlatmak:/ – Elisabeth

+1

@Elisa ben mütevazi doğrulama reinitializing için bir AddRemoveValidator işlevi oluşturma bitti fonksiyonu (i formu) { \t \t \t \t $ (biçimi) .removeData ("doğrulayıcı"); \t \t \t \t $ .validator.unobtrusive.parse (form); \t \t \t}); \t \t} \t \t addValidationToFormRemoveFromOthers: fonksiyonu (formToAdd, formsToRemoveFrom) {(formsToRemoveFrom in var) { \t \t \t \t $ (itibaren) \t \t \t.removeData ("Doğrulayıcı"); \t \t \t} \t \t \t global.addValidationToForm (formToAdd); \t \t} ' –

İlgili konular