2010-03-29 50 views
0

我一直在使用asp.net mvc(但我仍然是一個開始)。我想有能力更新兩個視圖作爲jquery回發的結果。ASP.NET MVC 2 JQuery POST不顯示模型狀態錯誤

基本上我有一個列表和詳細信息視圖。詳細信息視圖是使用jquery彈出窗口(使用jQuery UI彈出窗口)呈現的。如果細節保存成功(即細節視圖中沒有驗證錯誤),我只想更新列表。但是,如果細節視圖中有任何驗證錯誤,我想更新詳細信息視圖,以便用戶看到驗證錯誤。

所以我想在我的控制器中,我返回一個JsonResult而不是一個View。你可以看到如果沒有錯誤,我返回人員列表視圖,但是如果有任何驗證錯誤,我已經返回細節視圖。我返回JsonResult的原因是我需要告訴我的視圖有一個錯誤,以便視圖(jquery)知道要更新哪個部分(如更新人員列表'div'或彈出對話框'div 「)。因此,在我看來,jquery如下(請假定有一個表格用於輸入個人詳細信息和「SubmitPersonForm();」功能在點擊「保存」按鈕時調用):

<script type="text/javascript> 
    $('#btnSave').click(function (event) { 
      onBegin(); 

      $.ajax(
      { 
       type: "POST", 
       url: "/Person/Save", 
       data: $('form').serialize(), 
       success: function (result) { 
       if(result.Error) { 
         $('#dvDetails').html($(result).View)); 
        } 
        else { 
         $('#dvPersonList').html($result); 
        } 
       } 
      }); 
     }); 
</script> 

所以現在的問題是,當出現驗證錯誤時,我確實看到正確的'div'被更新,但是我失去了asp.net mvc驗證消息。我沒有看到紅色的任何驗證錯誤,就好像ASP.NET MVC完全忽略它們一樣。但是,我的ModelState確實有這些錯誤,只是沒有顯示在細節視圖中。我確實具有驗證摘要和Html.ValidationFor(m => ...)語句放在我的詳細信息視圖中。

有人能告訴我爲什麼我沒有看到驗證錯誤嗎?儘管我使用的是JSonResult,但我在使用'dvDetails'時使用了正確的屬性,這是一個有效的視圖。我在做asp.net mvc中沒有的東西嗎?順便說一句我用Visual Studio 2010 RC使用asp.net mvc2 RC。

謝謝。

回答

0

Url與Action名稱不匹配......不確定您是否正在調用控制器上的錯誤Method ...只是一個想法。 :-)

+0

謝謝您的回覆。對不起,這是我的問題中的拼寫錯誤。我已絕對確信網址是正確的。事實上,我已經調試過,它會打電話給我的控制器。事實上,當驗證失敗時,ModelState將包含驗證錯誤(由於我的數據註釋)。真的不知道爲什麼我沒有看到在視圖中的錯誤:(。 – Oshan 2010-04-01 07:39:14

+0

好吧,只是想確保... 也許它的一個限制,當它作爲一個部分視圖被拒絕 你看過這個:http://stackoverflow.com/questions/1556533/asp-net-mvc-modelstate-and-partial-view似乎是相同的probmen。 – Syska 2010-04-01 15:48:01

0

ASP.NET MVC代碼處理響應以在回發期間顯示存儲在ModelState中的驗證錯誤。因爲您使用的是Ajax Post,所以回發代碼不會重建頁面並顯示驗證錯誤。如果你想顯示驗證錯誤,你必須自己處理。

我已經通過在響應中傳遞ModelState錯誤作爲數組來完成它。我處理我的Ajax響應,以更新響應中相應錯誤消息的表單中的驗證錯誤佔位符元素。

但是,一個警告:ModelState中的鍵可能會更改其大小寫,因此表單中的元素ID字符串與用於該鍵的字符串不完全匹配。 ModelStateDictionary不區分大小寫,但DOM ID不是。