2009-09-29 74 views
0

我正在研究一些使用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「最大請求長度超出」時。

我需要的是一種在出現這種錯誤時用適當的消息更新用戶的方法。

我已經考慮了以下幾點:

  1. 嘗試使用窗體插件來 檢測和ajaxSubmit的()內處理這一點 - 這 不會出現成爲可能。
  2. 添加一些客戶端驗證 要上傳的文件 - 不使用 Flash或ActiveX,我找不到在IE和FF中檢查文件大小等的方式 。
  3. 處理由Controller.Execute()方法拋出的HttpException,和 通信這與 SaveAttachments()動作 - 我是 考慮重寫 controller.Execute()方法,以允許 此。

實現必要的驗證的最佳方法是什麼,如果沒有乾淨的方式處理異常是可接受的解決方法?

謝謝。

編輯:

我已經減少到兩個選項:

  1. 使用閃光燈/的ActiveX /的 更靈活的文件上傳表單的Silverlight。
  2. 找到一種方法來指示文本從 內容長度超過異常 處理程序到在窗體中顯示 狀態。由於文件上傳表單使用一個iFrame提交 我不 相信我能做到這一點..
+0

我有/有同樣的問題。我不想使用Flash/ActiveX/Silverlight(我寫了一個jQuery ajax多文件上傳器)。根據經驗:在發佈之前無法知道內容長度,因此無法檢查客戶端的文件長度。當動作barfs一次接收太多字節時,你可能會把狀態返回給客戶端,然後試圖做到這一點Ajax似乎對我毫無意義。我只是在UI上指定每個文件必須小於特定長度。注意:當我上傳多個文件時,我不會受到文件總數相同的長度限制。 – 2009-11-16 11:32:16

回答

0

你就不能使用jQuery的ajaxError功能? http://docs.jquery.com/Ajax/ajaxError#callback

此外,您可能想要更具體地說明您正在使用哪個插件。 ajaxSubmit()不是核心jQuery。

+0

我正在使用Form插件。我修改了我的帖子,使其更加明顯。 – TonE 2009-09-30 08:59:20

+0

不幸的是,MVC框架在發佈之前會拋出內容長度異常。結果jQuery ajax的東西永遠不會得到返回的結果。 – TonE 2009-10-02 10:48:04