2017-03-28 66 views
1

我在嘗試上載docx文件時遇到問題。首先,當我點擊「選擇文件」時,提示符打開,但頁面重新加載到CheckInController/CheckIn url(我認爲你在Html.BeginForm中添加的內容是你的控制器和方法在你點擊提交時去的地方) 。第二件事是我如何知道文檔的內容正在發送到服務器,而不僅僅是名稱或ID?如何使用jquery + c上傳文件#

https://jsfiddle.net/w6adx6za/1/

<div class="session-filter"> 
    @using (Html.BeginForm("CheckIn", "CheckInController", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     <div class="select-filter-title"><strong>Select File</strong></div> 
     <table> 
      <tr> 
       <td><input name="fileResume" id="hiddenFileResume" type="file" value="" /><input type="submit" onclick="tested()"/></td> 
      </tr> 
     </table> 
    } 
</div> 

function tested(){ 
    $.ajax({ 
     cache: false, 
     type: "POST", 
     url: "/SummaryStatementProcessing/CheckInSummaryStatement", 
     data: data 
    }); 
} 

    public ActionResult CheckIn(HttpPostedFileBase fileResume){ 
     //work in here 
    } 

我並不需要的頁面去任何地方(因爲這實際上是在一個對話框,因此可以關閉上提交,但目前它重新加載頁面的網址同上)。目前我甚至不能去控制器檢查...

+0

控制器的名稱有錯誤,對嗎?您在AJAX調用中調用CheckInSummaryStatement,並將Controller調用CheckIn。 – ProgrammerV5

回答

1

要做你想做的事情,最簡單的方法是在請求中發送一個FormData對象。但是,理想情況下,您應該連接到formsubmit事件,而不是提交按鈕的click,以停止頁面重定向。

您需要在請求中將processDatacontentType屬性設置爲false。此外,操作名稱看起來不符合您的網址。你可以通過使用@Url.Action來解決這個問題。 Action還需要[HttpPost]屬性,因爲這是您在AJAX請求中使用的HTTP動詞。

與所有的說,試試這個:

<div class="session-filter"> 
    @using (Html.BeginForm("CheckIn", "CheckInController", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
    <div class="select-filter-title"><strong>Select File</strong></div> 
    <table> 
     <tr> 
     <td> 
      <input name="fileResume" id="hiddenFileResume" type="file" value="" /> 
      <input type="submit" /> 
     </td> 
     </tr> 
    </table> 
    } 
</div> 
$('.session-filter form').submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
    cache: false, 
    type: "POST", 
    url: '@Url.Action("CheckIn", "SummaryStatementProcessing")', 
    data: new FormData(this), 
    processData: false, 
    contentType: false, 
    }); 
} 
[HttpPost] 
public ActionResult CheckIn(HttpPostedFileBase fileResume) 
{ 
    // work in here 
} 

有了上面的代碼,你應該然後能夠與在行動HttpPostedFileBase類的工作。

+0

我一直在看你的編輯,我以爲我正在對我的帖子進行很多更正! :)。 – ProgrammerV5

+0

@ ProgrammerV5大聲笑,每次我編輯我發現其他需要改變的東西:) –

+0

我知道,我有時感覺相同的方式:)。我還會補充說,控制器需要[HttpPost]作爲裝飾(以防萬一),否則您的響應似乎完成。 – ProgrammerV5

相關問題