2011-12-01 27 views
0

好吧,這讓我很煩!我在這個彈出窗口中有一個由Ajax.ActionLink觸發的簡單模式彈出窗口,我有一個標準的HTML文件輸入控件以及一些其他文本字段。當我提交時,我可以讓我的所有文本字段沒有問題,但文件始終爲空。下面是我的代碼的副本:MVC 3模態彈出窗口和文件輸入

更新操作:

[HttpPost] 
    public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase FileData, string clipID) 
    { 
     return RedirectToAction("Clips"); 
    } 

這是從局部的形式在模態窗口中顯示:

<div class="modal_content"> 
    @using (Html.BeginForm("UpdateClip", "EditProfile", new { clipid = Model.ID }, FormMethod.Post, new { @id = "modalpopupform", enctype = "multipart/form-data" })) 
    { 
     <ul class="list_to_row"> 
      <li class="cell" style="width: 75px">Clip Description</li> 
      <li class="cell"> 
       @Html.TextBoxFor(m => m.Description, new { style = "width: 350px" })<br /> 
       @Html.ValidationMessageFor(m => m.Description) 
      </li> 
     </ul> 
     <ul class="list_to_row"> 
      <li class="cell" style="width: 75px">Base Cost</li> 
      <li class="cell"> 
       @Model.BaseCost 
      </li> 
     </ul> 
     <ul class="list_to_row"> 
      <li class="cell" style="width: 75px">Cost</li> 
      <li class="cell"> 
       @Html.TextBoxFor(m => m.UserCost, new { style = "width: 350px" })<br /> 
       @Html.ValidationMessageFor(m => m.UserCost) 
      </li> 
     </ul> 
     <ul class="list_to_row"> 
      <li class="cell" style="width: 75px">Preview Image</li> 
      <li class="cell"> 
       <input type="file" id="file" name="file" /> 
      </li> 
     </ul> 
     <div class="clearfix"></div> 
     <div class="modal_button_area"> 
      <input id="submitmodalpopup" type="submit" value="Update" class="button" /> 
      <input id="closemodalbox" type="button" value="Cancel" class="button" /> 
     </div>  
    } 
</div> 

可有人請一些線索在這?谷歌似乎沒有任何關於我的詞彙組合,或者我錯過了一些我不知道的簡單內容。乾杯。

+0

請發表完整的表格,不只是第一行 –

回答

0

在你採取行動的說法被稱爲FileData所以在您的標記一致,以及:

<input type="file" id="file" name="FileData" /> 

或者,如果你想保留的文件作爲輸入的名稱,然後重命名你的行動的說法:

[HttpPost] 
public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase file, string clipID) 
{ 
    return RedirectToAction("Clips"); 
} 

但我個人將包括該文件作爲我的視圖模型的財產,我不會和一個額外的參數打擾:

public class ClipModel 
{ 
    ... some properties 

    public HttpPostedFileBase File { get; set; } 
} 

,然後在我的強類型的觀點,我將使用一個強類型的輔助生成文件的輸入,這樣我就不必擔心適當的命名:

<li class="cell"> 
    @Html.TextBoxFor(x => x.File, new { type = "file" }) 
</li> 

和你的控制器動作的簽名會像簡單如:

[HttpPost] 
public ActionResult UpdateClip(ClipModel model) 
{ 
    return RedirectToAction("Clips"); 
} 

這是大多數POST控制器操作簽名應該是什麼樣子。

+0

乾杯Darin,不敢相信我沒有看到標記中的不匹配。一直看這麼久,我想我看不到樹木的木材!我已經採納了您的建議,並將該文件添加爲模型的屬性。 –