2011-11-06 33 views
2

在我看來,我有2個部分視圖。當ModelState無效時提交數據後的Ajax表單和UpdateTargetId

  • 第一局部視圖(PV1):用戶可以在文本框鍵入一個信息並通過一個Ajax表單提交。
  • 第二部分視圖(PV2):用戶可以看到之前提交的項目列表。

PV1在PV2上的div上使用UpdateTargetId,因爲我們想用新添加的項目更新我們的列表。

當在PV1上提交的項目有效時,一切正常。當提交ajax表單時ModelState.IsValid == false不起作用。它不起作用,因爲UpdateTargetId位於PV2上,我需要更新PV1以顯示ModelState錯誤。所以我們遇到了PV2上PV1的重複!

下面是對類似問題的另一個stackoverflow帖子,但沒有提供解決方案。

ASP.NET MVC AJAX change UpdateTargetId if ModelState is invalid

我覺得的Json替代可能是一個解決方案,但我想知道,如果我們能適應標準Ajax表單方法在這裏滿足我們的需要?

回答

6

而不是使用UpdateTargetId的,你可以嘗試使用OnComplete

function complete(result) { 
    var isError = $('span.field-validation-error', result.responseText).length > 0; 
    if (isError) { 
     // there was an error => we update the container of the form 
     $('#frmContainer').html(result.responseText); 
    } else { 
     // no error => we hide validation errors and update the result container 
     $('#frm .field-validation-error').hide(); 
     $('#frm .input-validation-error').removeClass('input-validation-error'); 
     $('#result').html(result.responseText); 
    } 
} 
+1

非常感謝你,我:

@using (Ajax.BeginForm(new AjaxOptions { OnComplete = "complete" })) { ... } 

這個處理機測試是否有結果視圖的錯誤內很高興看到有圍繞Ajax.Beginform助手的解決方案。 – Bronzato