我正在研究一些使用jQuery Forms插件允許用戶上傳文件的ASP.NET MVC代碼。在ASP.NET MVC中使用jQuery表單上傳文件驗證
的形式爲:
<% using (Html.BeginForm("SaveAttachments", "Data", FormMethod.Post, new { enctype = "multipart/form-data", id="SaveAttachments" })) {%>
<input type="file" name="consentform" size=30/>
<input type="file" name="infosheet" size=30/>
<input type="file" name="approval" size=30 />
<%} %>
的形式使用jQuery使用Form插件提交:
$('#SaveAttachments").ajaxSubmit({
success: function(html, status) {
$("#response").append(html);
}
});
它是由一個控制器動作名稱SaveAttachments處理:
public ActionResult SaveAttachments(HttpPostedFileBase consentform, HttpPostedFileBase infosheet, HttpPostedFileBase approval)
{
string message = SaveFiles(consentform, infosheet, approval)
return Content(message);
}
這除了在防止控制器動作被調用的錯誤的情況下工作良好;特別是在文件大小過大並且引發HttpException「最大請求長度超出」時。
我需要的是一種在出現這種錯誤時用適當的消息更新用戶的方法。
我已經考慮了以下幾點:
- 嘗試使用窗體插件來 檢測和ajaxSubmit的()內處理這一點 - 這 不會出現成爲可能。
- 添加一些客戶端驗證 要上傳的文件 - 不使用 Flash或ActiveX,我找不到在IE和FF中檢查文件大小等的方式 。
- 處理由Controller.Execute()方法拋出的HttpException,和 通信這與 SaveAttachments()動作 - 我是 考慮重寫 controller.Execute()方法,以允許 此。
實現必要的驗證的最佳方法是什麼,如果沒有乾淨的方式處理異常是可接受的解決方法?
謝謝。
編輯:
我已經減少到兩個選項:
- 使用閃光燈/的ActiveX /的 更靈活的文件上傳表單的Silverlight。
- 找到一種方法來指示文本從 內容長度超過異常 處理程序到在窗體中顯示 狀態。由於文件上傳表單使用一個iFrame提交 我不 相信我能做到這一點..
我有/有同樣的問題。我不想使用Flash/ActiveX/Silverlight(我寫了一個jQuery ajax多文件上傳器)。根據經驗:在發佈之前無法知道內容長度,因此無法檢查客戶端的文件長度。當動作barfs一次接收太多字節時,你可能會把狀態返回給客戶端,然後試圖做到這一點Ajax似乎對我毫無意義。我只是在UI上指定每個文件必須小於特定長度。注意:當我上傳多個文件時,我不會受到文件總數相同的長度限制。 – 2009-11-16 11:32:16