2009-09-17 50 views
1

在這種情況下,用戶不安裝Javascript,爲了畫一個表格,我開始是這樣的:ASP.NET MVC Ajax窗體:enctype是否正確?爲什麼沒有文件上傳?

<% using (Html.BeginForm("Create", "Language", FormMethod.Post, 
    new {enctype="multipart/form-data"})) 
{ %> 

如果用戶已經安裝Javascript,下面的代碼被用於:

<% using (Ajax.BeginForm("Create", "Language", 
    new AjaxOptions { UpdateTargetId = "CommonArea" }, 
    new { enctype = "multipart/form-data" })) 
{ %> 

問題是這樣的:

在第一種情況下,我可以使用下面的指令在業務層中獲取上傳的文件:

// Get the uploaded file 
HttpPostedFile Flag = HttpContext.Current.Request.Files["Flag"]; 

在第二種情況下,該指令不起作用。我如何知道使用Ajax.BeginForm上傳該文件?代碼是否正確?任何人有更多的經驗建議使用jQuery插件上傳表單之前上傳文件?

謝謝

回答

3

你不能單獨使用AJAX做文件上傳。許多(大多數?)異步上傳器使用動態創建的隱藏iframe,其中包含一個通常回傳給服務器的表單。我建議通過jQuery插件存儲庫查找「ajax upload」並查看是否可以找到適用於您的插件,該插件將使用javascript和iframe的組合進行上載。

注意:此時Firefox和Chrome支持XMLHttpRequest2,它允許通過AJAX請求上傳。人們會期望對此的支持將在某些時候變得普遍,並且在所有瀏覽器中都可以實現真正的異步上傳。支持FormData的瀏覽器也可以使用該界面上傳文件。

+0

哎呀...感謝您指出了這一點...浪費了2個小時搜索的問題... – 2012-04-25 11:58:48

1

jQuery Form插件有一個非常非常整潔和完全透明的方式做到這一點。它會自動轉換爲隱藏的iframe。只有你需要做的是在表單上調用.ajaxForm()來初始化組件。唯一的問題是,如果您從action方法返回json,則必須更改內容類型,以便您的回調函數將其識別爲json。

這是一個有點怪異,但是這是爲我工作:

JsonResult result = Json(response); 
result.ContentType = "text/html"; 
return result;