2011-08-10 29 views
13

Tôi gặp phải rất nhiều sự cố khi xác thực để làm việc trên MVC3. Nó hoạt động tốt khi tôi chỉ tải trang trực tiếp, nhưng nó không xác nhận khi tôi sử dụng jquery AJAX POST:Gặp sự cố khi xác nhận không phô trương khi làm việc với mvc 3 trên bài đăng jquery ajax

Hình thức này được nạp bằng $('#modal-dialog').load('/DartsMVC/Restaurant/Edit/13'), Đây là HTML hiển thị:

<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 là được sử dụng bằng cách chặn biểu mẫu/gửi. Hộp thoại phương thức bật lên và đóng lại sau khi bài đăng hoàn tất. Tôi muốn xác thực biểu mẫu trước khi gửi bài đăng:

// 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 + "')"); 
      } 
     }); 
    } 
}); 

Tôi đã phá vỡ điều gì đó bằng cách làm điều này? .valid() luôn trả về giá trị đúng.

web.config của tôi có:

mã nguồn trang web của tôi có:

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

Và mô hình của tôi có:

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

Sau khi nghiên cứu nhiều hơn, tôi nghĩ rằng nó có thể có điều cần làm với các điều khiển động:

Trả lời

26

Giải Quyết

Gọi $ .validator.unobtrusive.parse ($ ('form')) đã làm lừa. Tôi đoán trình xác thực cần phải được tạo lại cho nội dung động

+0

Cảm ơn! Tôi đã tìm ra điều này một thời gian trước đây, nhưng không có thời gian và tìm kiếm giải pháp một lần nữa. –

+0

@juhan_h Bạn gọi mã của bạn ở đâu với mã $ .validator từ phía trên. Tôi có thể có một vấn đề tương tự:/ – Elisabeth

+1

@Elisa, tôi đã kết thúc việc tạo ra một chức năng AddRemoveValidator cho reinitializing xác nhận không phô trương: '// khởi tạo lại xác nhận không phô trương \t \t addValidationToForm: function (formToAdd) { \t \t \t jQuery.each (formToAdd, chức năng (i, hình thức) { \t \t \t \t $ (theo mẫu) .removeData ("validator"); \t \t \t \t $ .validator.unobtrusive.parse (theo mẫu); \t \t \t}); \t \t}, \t \t addValidationToFormRemoveFromOthers: function (formToAdd, formsToRemoveFrom) { \t \t \t for (var từ trong formsToRemoveFrom) { \t \t \t \t $ (từ).removeData ("validator"); \t \t \t} \t \t \t global.addValidationToForm (formToAdd); \t \t} ' –

Các vấn đề liên quan