2011-01-11 141 views
2

我已閱讀了很多關於此主題的不同文章,我將繼續這樣做並嘗試各種各樣的內容。儘管如此,由於我在MVC方面相對缺乏經驗等原因,信息差別很大,所以我覺得我會繞圈一圈。MVC3提交Ajax表格

這是情況。我在包含jqGrid中的記錄的MVC3應用程序中顯示(Razor)視圖。雙擊記錄將在jQuery UI對話框中打開該記錄。原始視圖只包含代表對話框的那個視圖。被調用的動作返回一個局部視圖,成爲對話div的內容。

function editItem(gridID, url) { 
    var rowID = getSelectedRowID(gridID); 

    if (rowID == null) { 
     alert('No row selected.\r\nPlease select a row and try again.'); 
     return; 
    } 
    else { 
     var grid = getGrid(gridID); 

     $("#editDialogue").load(url + "/" + grid.SelectedRowID, function (html) { 
      $("#editDialogue")[0].value = html; 
      $("#editTabs").tabs(); 
      $("#editDialogue").dialog("open"); 
     }); 
    } 
} 

這部分工作,雖然我覺得它可以忍受一點點清理。我真正的問題是稍後提交包含在該對話框中的表單。它應該回發到一個名字相同的動作,它就是這樣。該行爲應該驗證並保存或返回具有驗證錯誤的相同部分視圖。此刻,我試圖僅僅返回視圖而不做任何其他事情。視圖可以正常返回,但整個頁面被替換,而不僅僅是對話框的內容。

我已經嘗試了各種各樣的東西,包括使用Ajax.BeginForm和指定對話框div的id作爲AjaxOptions的UpdateTargetId。到目前爲止沒有任何工作。請注意,提交的表單在div內,因此它也會被替換。不知道這是否是問題的一部分。

我現在正在收拾一天,所以我想我會發布,看看在早上再次攻擊問題之前發生了什麼。

+1

我錯過了什麼嗎?這聽起來像你問的問題實際上沒有發佈?那是對的嗎?如果是這樣,我們應該如何幫助? – jmort253 2011-01-11 08:21:17

回答

2

jmcilhinney, 您是正確設置AjaxOptions.UpdateTargetId,但您還需要將AjaxOptions.InsertionMode設置爲InsertionMode.Replace。

0

我也遇到了同樣的問題。解決的辦法是確保jquery.unobtrusive-ajax.is文件在頁面上。這解決了我的問題。請仔細檢查確定。我確信我擁有所有的js文件,但發現我錯過了那一個。