2012-04-06 164 views
0

我正在上傳一個文件在我的ASP.NET MVC應用程序中。在.ascx文件,我有以下幾點:文件上傳 - 返回null

<form action="/Admin/Mail/ABC" enctype="multipart/form-data" method="post"> 
<div>    
    <input type="file" name="file" id="file" /> 
    <input type="submit" value="Upload" id="UploadList" onclick="Origin.UploadOptOutList();"/> 
</div> 
在.js文件

Origin.UploadList = function() { 
    Origin.ajax({ 
     url: '/Admin/Mail/Upload', 
     type: 'POST', 
     dataType: 'json', 
     success: function (data) { 
      alert('success!'); 
     } 
    });    
} 

和控制器:

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{ 
    List<string> validIDs, invalidIDs; 
    if (file.ContentLength > 0) 
    { 
     // do something 
    } 
} 

當調用從.js文件操作, '文件'始終爲NULL。任何想法我失蹤?

回答

2

首先,除非使用HTML5,否則不能異步上傳文件。如果你仍然需要這個功能,你可能想嘗試jQuery Form plugin

在第二,在當前的JS你是不是符合你的要求(場dataajax方法選項)發送任何數據,這就是爲什麼你不能在服務器端接收任何東西。此外,如前所述,無法在此請求中插入文件。你這裏最簡單的方法是用AJAX放棄,讓文件在通常的方式上傳:

查看:

<form action="/Admin/Mail/Upload" enctype="multipart/form-data" method="post"> 
    <div>    
     <input type="file" name="file" id="file" /> 
     <input type="submit" value="Upload" id="UploadList" /> 
    </div> 
</form> 

沒有在這裏JS,服務器的代碼是一樣的。

+0

OK-上面會張貼形式向行動「/管理/郵件/ ABC」。如果我想在上傳失敗的情況下向用戶顯示錯誤,該怎麼辦?我希望能夠完成所有使用jQuery的工作。我現在怎麼做到這一點? – GoldenUser 2012-04-06 19:12:25

+0

你有兩個選擇:要麼保持一切同步,處理服務器端發生的任何錯誤,然後返回相應的視圖(比如說相同的視圖,但包含錯誤消息),或者你可以看看帖子中提到的jQuery插件,並且做很多事情都是爲了達到目的,但只使用jQuery。 – Andrei 2012-04-06 19:20:31

1

這就是你需要

ScriptManager sm = ScriptManager.GetCurrent(Page); 
      sm.RegisterPostBackControl(btnEditSubmit); 
      Page.Form.Attributes.Add("enctype", "multipart/form-data"); 
      Page.Form.Attributes.Add("method", "post"); 
+1

你可以提供更多關於需要去哪裏的細節嗎? – 2012-11-05 22:02:42