2016-01-21 104 views
0

我有一個輸入類型=「文件」,並在該輸入的變化,我想要一個表單提交。ajax後表單使頁面重定向

$(document).on("change", "#image-upload", function (e) { 
    $.ajax({ 
     url: '/BlogPost/UploadHomeReport', 
     type: 'POST', 
     data: $('#upload-image-form').serialize(), 
     success: function (response) { 
      console.log(response); 
     } 
    }); 
}); 
<form action="~/BlogPost/UploadHomeReport" method="post" enctype="multipart/form-data" id="upload-image-form"> 
    <input type="file" id="image-upload" name="file" /> 
    <input type="text" name="destinationId" id="destinationId" /> 
</form> 
[HttpPost] 
public JsonResult UploadHomeReport(HttpPostedFileBase file, int destinationId) 
{ 
    var fileName = Path.GetFileName(file.FileName); 
    file.SaveAs(Server.MapPath("~/App_Data/UploadedImages/" + destinationId + fileName)); 
    var path = Server.MapPath("~/App_Data/UploadedImages/" + destinationId + fileName); 
    return Json(path); 
} 

一切完美,但是當它應該返回JSON它重定向到一個新的頁面。爲什麼不返回JSON而不是重定向?

+0

嘗試刪除表單 –

+0

中的「操作」如果我這樣做,UploadHomeReport actionmethod中的文件變爲null :( –

+0

但是,您不是通過提交發布,您正在使用ajax,是不是?需要在那裏採取行動?也許這就是爲什麼它重定向,也許,在代碼中的某個地方提交 –

回答

0

這聽起來像你在你的代碼中有其他問題。由於這是一個更改監聽器,因此它不會自動提交。別的東西正在導致重定向發生。你需要粘貼你得到的響應(302?)並從那裏調試。

此外,刪除表單標籤中的操作以查看它是否仍在提交,但如果您的應用程序可以在沒有javascript的情況下運行,那麼最好提供一個後備。

+0

刪除已編輯回覆的downvote – mhodges

+0

這正是問題所在,但在OP提交之前,我們不能做其他事情= \ – mhodges

-1

您的表單操作默認情況下正在執行。您需要通過使用e.preventDefault()來停止提交表單。

當發生更改事件時,下一個方法會處理並處理。

從URL路徑我想這是ASP.NET(也許),然後表單操作處理將執行回發。

+0

我不相信它。Doi在這個事件中,e.preventDefault()不會對錶單執行任何操作,因爲如果仔細觀察,它不是表單上的事件。它是的事件處理程序。文件輸入不會自動提交表單(出於明顯的安全原因) – mhodges

+0

@mhodges你能解釋爲什麼呢?我的意思是,如果我要爲此得到低估,那麼至少有人能夠回答這個問題呢? –

+0

我在帖子的評論中回答了它。這個問題與這裏沒有提供的代碼有關。我們無法爲我們尚未看到的代碼提供答案。 OP需要深入挖掘並幫助我們解決問題,但我保證它與e.preventDefault()無關(至少在他提供的代碼中 - preventDefault()可能需要放置在他的代碼中的其他地方,但我們需要更多的信息來找出在哪裏) – mhodges