2012-09-14 102 views
0

我正在處理一個簡單的表單,用戶將輸入一些數據並選擇要上傳的文件。 但我不能得到這個工作.. 由於某種原因,當我點擊保存,文件不會去控制器。無法上傳文件/圖像

這是一些代碼。

@using (Ajax.BeginForm("Add", "Category", null, new AjaxOptions 
{ 
UpdateTargetId = "upload-message", 
InsertionMode = InsertionMode.Replace, 
HttpMethod = "POST", 
OnSuccess = "uploadSuccess" 
}, new { id = "AddCategoryForm", enctype = "multipart/form-data" })) 
{ 
<div class="editorLabel"> 
    @Html.LabelFor(m=>m.CategoryName) 
</div> 
<div class="editorText"> 
    @Html.TextBoxFor(m=>m.CategoryName) 
</div> 
<div class="editorLabel"> 
    @Html.LabelFor(m => m.Description) 
</div> 
<div class="editorText"> 
    @Html.TextAreaFor(m => m.Description) 
</div> 

<div class="editorLabel"> 
    @Html.LabelFor(m => m.IconPath) 
</div> 
<div class="editorText"> 
    <input type="file" id="file" name="file" /> 
</div> 
<div class="editorLabel"> 
    @Html.LabelFor(m => m.IsActive) 
</div> 
<div class="editorText"> 
    @Html.CheckBoxFor(m=>m.IsActive) 
</div> 
<p> 
    <input type="submit" id="submit" value="Save" /> 
</p> 

}

控制器:

[HttpPost] 
    public ActionResult Add(HttpPostedFileBase file,CategoryViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      System.IO.FileInfo info = new FileInfo(file.FileName); 
      string ext = info.Extension; 
      //other code 
     } 
     } 

在這裏的控制器,文件始終爲空。 我在哪裏做錯了?

+1

使用ajax檢查文件上傳的答案[this](http://stackoverflow.com/questions/4856917/jquery-upload-progress-and-ajax-file-upload/4943774#4943774)。 –

回答

0

首先交換參數控制器的擁有它,如下所示:

[HttpPost] 
public ActionResult Add(CategoryViewModel model, HttpPostedFileBase file) 

對於example

如果這不會出於某種原因,讓你上傳你的模型(CategoryViewModel)的部分文件,並有控制器的簽名如下:

[HttpPost] 
public ActionResult Add(CategoryViewModel model) 

對於example。這種方式文件將作爲模型的一部分返回,您將提取它作爲模型的一個屬性。這將工作(它對我有效)。

希望這會有所幫助。

+0

謝謝。當我將圖像作爲視圖模型的一部分時,它起作用。但是,當我將文件作爲單獨的參數發送時,它爲什麼不起作用?你有什麼主意嗎? – kandroid

+0

我認爲它是因爲你交換了參數,第一個是模型,第二個是'HttpPostedFileBase'。但不能確定,ASP MVC中的一些東西是反覆試驗,而不是先前的知識,至少在我的情況下。我知道答案的原因是因爲我在完全按照建議之前自己做了這件事 - 將您需要的所有內容都包含在視圖模型中,然後您就可以了。 –