2009-09-25 74 views
1

我的工作包含兩種形式來看,是返回serilaized到JSON字符串單獨的控制器行爲處理:處理的Json結果在ASP.NET MVC使用jQuery

return Json(message); 

的形式使用jQuery提交通過點擊兩個表格之外的按鈕。 按鈕處理程序:

$('#inviteForm').ajaxSubmit({ 
     success: function(html, status) { 
      $("#response").text(html); 
     } 
}) 
$('#trialForm').ajaxSubmit({ 
     success: function(html, status) { 
      $("#response").append(html); 
     } 
}); 

的瀏覽器接收該結果,並提示用戶,因爲它被解釋爲「應用程序/ JSON」下載。

但是,如果我只在jQuery中提交這些表單中的一個,那麼生成的Json消息會根據需要顯示爲#response元素中的字符串。

爲什麼添加第二個ajaxSubmit()會導致這種不同的行爲?

謝謝。

該視圖包含以下幾種形式:

<form action="/Controller1/SaveAttachments/<%=Model.ObjectId %>" id="trialForm" method="post" enctype="multipart/form-data"> 
     <input type="file" name="trialForm" size=30/> 
     <input type="file" name="trialSheet" size=30/> 
     <input type="file" name="trialApproval" size=30/> 
</form> 

和...

<form action="/Controller1/UpdateTemplate/<%=Model.ObjectId %>" id="inviteForm" method="post" enctype="multipart/form-data"> 
     <%=Html.TextArea("invitationSheet", Model.InvitationSheet, 
              new { @name = "invitationSheet"}) 
<script type="text/javascript"> 
      window.onload = function() { 
       var sBasePath = '<%=Url.Content("~/Content/FCKeditor/")%>'; 
       var oFCKeditor = new FCKeditor('invitationSheet'); 
       oFCKeditor.BasePath = sBasePath; 
       oFCKeditor.HtmlEncodeOutput = true; 
       oFCKeditor.ReplaceTextarea(); 
      } 
</script> 

+0

您是否嘗試更改第二次提交來設置文本而不是附加到DOM?這是兩者之間的顯着差異,但我不確定爲什麼會導致這種行爲。 – tvanfosson 2009-09-25 14:24:19

+0

感謝您的建議。我已經嘗試了.text()和.append(),但行爲沒有區別。還有一點是第一個ajaxSubmit的結果顯示在#response中 - 它是第二個ajaxSubmit的結果,它被解釋爲「application/json」。 – TonE 2009-09-25 14:27:55

+0

我剛剛嘗試從控制器操作中註釋掉所有代碼,因此代碼現在返回Json(「Action1」)並返回Json(「Action2」)。仍然得到相同的行爲。將視圖上的表單代碼添加到我原來的帖子中... – TonE 2009-09-25 14:35:21

回答

1

更新

無法通過AJAX直接將文件上傳所以它正在做一個包含形式的實際職位g文件輸入。你應該看看一個插件,它可以讓你使用隱藏的iframe技術上傳文件,該技術異步工作,而不是使用AJAX上傳。

+0

控制器操作將文件接收爲HttpPostedFileBase對象,然後將其保存。將狀態消息作爲內容(消息)而不是Json(消息)或使用Json(消息「text/html」)返回似乎可以解決問題... – TonE 2009-09-25 15:30:36

+0

我仍然認爲它正在完成一個完整的帖子,但不是阿賈克斯職位,這是你的錯誤來自何處。這可能是該插件隱藏了你的這個。我對插件不熟悉,所以我不能肯定地說。 – tvanfosson 2009-09-25 15:40:48

+0

...也就是說,當提交「ajax」文件上傳時,它會爲您調用隱藏的iframe技術,並將結果返回到iframe中。將application/json下載到iframe中會彈出下載框。將其更改爲普通內容(text/html)將允許瀏覽器正常接收數據,插件可以從iframe內容中檢索數據。 – tvanfosson 2009-09-25 15:42:50