2012-09-06 43 views
0

我有一個使用實體foo的對話框。
後,我保存的值從該對話框中我做到以下幾點:
ModelState和對話框

$('#SaveEditPQ').submit(); //jquery submit 
    $("#NewQuickDlg.results").remove(); // clear the fields within the dialog Box 
    $("#AddQuickDlg").dialog("close"); // close the dialog box. 


現在...問題是當我嘗試使用(元數據)驗證。如果ModelState.IsValid爲假,我想保持對話框打開。

$('#SaveEditPQ').submit(); 
    if ('@Model.IsValidVariable'==true) 
    { 
    $("#NewQuickDlg.results").remove(); 
    $("#AddQuickDlg").dialog("close"); 
    } 

這是做到這一點的最好辦法:

這可以通過一個值,將得到ModelState.IsValid的價值,改變我的jQuery來延長我的foo實體來解決非優雅?

回答

1

我在同一個問題上掙扎,但我解決了它的另一種方式。我不想用隱藏變量污染我的模型來關閉對話框,所以我所做的就是重定向到共享的_close partialview。然後在我的文章後,檢查是否存在關閉的div並關閉對話框。所以我的查詢看起來像

$(document).on('click', "#SaveButton", function() { 
    $.ajax({ 
     url: "/controller/Edit", 
     type: "POST", 
     data: $("form").serialize(), 
     error: function (data) { 
      var errorMessage = $.parseJSON(data.responseText); 
     }, 
     success: function (data) { 
      if (data) { 
       if ($(data).attr('id') == 'close') { 
        $("#myDialog").dialog('close'); 
       } 
       $("#myDialog").html(data); 
       $("form :input:visible:enabled:first").focus(); 
      } 
      else { 
       $("#myDialog").html('no data'); 
      } 
      return false; 
     } 
    }); 

所以現在我看到對話框中的服務器端驗證。

這裏的控制方法

[HttpPost] 
    public ActionResult SaveEdit(SomeType viewModel) 
    { 
     if (!ModelState.IsValid) 
     { 
      PopulateDropDowns(viewModel); 

      return PartialView(viewModel); 
     } 

     var someObject= _objectRepository.Get(viewModel.Id); 

     //make some changes to someObject 

     _objectRepository.Save(someObject); 

     return PartialView("_close"); 
    } 

這樣也遵循PRG模式

+0

感謝您的回答。現在轉移到一個新的問題...要試一試,並找出結果:) –