2013-02-22 80 views
0

我正在將PartialView加載到Jquery UI dialog中,如果在post method期間出錯,我將PartialView再次加載到對話框中(例如ModelState錯誤)。在這一點上,我的阿賈克斯sumbit不再工作。它只是重定向我,它不應該。根據結果驗證關閉jquery對話框

我的代碼有什麼問題?這是我曾嘗試:

$('#editdialog').dialog({ 
     autoOpen: false, 
     width: '900px', 
     modal: true, 
     open: function (event, ui) { 
      $(this).load('Controller action', function (html) { 
       $('#incarcerationForm').submit(function() { 
        $.ajax({ 
         url: 'Controller action', 
         data: $("#myForm").serialize(), 
         type: "POST", 
         success: function (data) { 
          $('#editdialog').html(data); 

          $.validator.unobtrusive.parse($("#myForm")); 

          if ($("#myForm").valid()) { 
           GetDetails(@Model.FormModel.ID); 
           $('#editdialog').dialog('close'); 
           console.log("myForm was edited successfully"); 
           return false; 
          } 

          return false; 

         }, 
         error: function (data) { 
          $('#editdialog').html(data); 
          console.log("error at edit myForm"); 
          return false; 
         } 
        }); 
        return false; 
       }); 
       return false; 
      }); 
     } 

    }); 

而且我[HttpPost]Controller行動:

public ActionResult Create(Mymodel viewModel) 
    { 
     return CheckValidBusiness(() => 
      { 
      viewModel.Save(viewModel.FormModel); return true; 
      }) 
     .Valid(() => PartialView(viewModel)) 
     .Invalid(() => PartialView(viewModel)); 

    } 

回答

1

替換:

$('#incarcerationForm').submit(function() { 

有:

$(document).on('submit', '#incarcerationForm', function() { 

讓您訂閱提交活動活動的形式,這將有彈性的DOM變化。請參閱.on()方法以獲取更多信息。

+0

好的。非常感謝你 !!這解決了我提交的問題,但是如何驗證是否存在驗證錯誤?我的意思是,如果提交已完成關閉對話框。 if($(「#myForm」).valid()){does not work – Kosmog 2013-02-22 15:23:31

+0

你可以讓你的控制器動作返回一個PartialViewResult,它包含帶有驗證錯誤的表單和錯誤情況下的驗證錯誤,以及成功時的JsonResult。然後在你的AJAX請求的成功回調中,你可以測試你是在哪種情況下采取相應行動。 – 2013-02-22 15:28:13

+0

我愛你! :))。我認爲,但我不知道它會工作,如果我的返回類型是ActionResult,我從來沒有嘗試過。 – Kosmog 2013-02-22 15:36:25