2010-03-22 68 views
6

我有一個表單使用HttpPostedFileBase的默認綁定器綁定模型和文件上載。使用Ajax.BeginForm綁定HttpPostedFileBase

使用Html.BeginForm()時可以正常工作。不過,我想用AJAX執行相同的操作,所以我用Ajax.BeginForm()替換了相應的參數。

該模型仍然綁定正確,但我無法獲得文件上傳綁定到HttpPostedFileBase。

這種結合的模型和文件上傳:

<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%> 

這僅結合模式:

<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%> 

控制器動作:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile) 

如果這是可能的,如果是的話,我在做什麼錯了?謝謝。

回答

9

您無法使用AJAX上傳文件。實現此目的的一種方法是使用隱藏的iframe,它將模擬AJAX調用並執行實際的文件上傳或使用Flash。這裏有一個非常好的jQuery Form插件,它使用了一個隱藏的iframe,它能夠透明地渲染包含文件字段的表單提交。

+0

感謝在清除了。我前段時間使用過jQuery Form插件,所以我應該自己記住這個!乾杯。 – TonE 2010-03-22 11:56:05

-1

是的我也同意。您可以使用'Ajax.BeginForm'.Add'enctype =「multipart/form-data」'將文件上傳到AjaxOptions對象。

0

ADD ID = 「文件」 在您的標籤輸入

IN YOUR的ActionResult參數 HttpPostedFileBase '文件' 的名字,並查看標籤名稱應該是相同的

[HttpPost] [ValidateAntiForgeryToken] 公衆的ActionResult創建(tbl_products tbl_products,HttpPostedFileBase文件) if(ModelState.IsValid) { tbl_products.phototype = file.ContentType; tbl_products.photo = new byte [file.ContentLength]; file.InputStream.Read(tbl_products.photo,0,file.ContentLength);

  if(obj.insert(tbl_products)) 
      { 
      return RedirectToAction("Index"); 
      } 
      else 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.Forbidden); 
      } 
     } 

     return View(tbl_products); 
    } 

它爲我工作

+3

你爲什麼大叫? – 2016-08-21 22:52:36

+1

對不起,我的網絡連續斷開,我正在大聲回答提及的問題 – 2016-08-21 23:03:49