2013-05-03 135 views
1

我想簡單地上傳圖像,但我的控制器中的HttpPostedFileBase始終爲空。MVC 4文件上傳不起作用

這裏是頁:

<% using(Html.BeginForm("AddPicture","Album",FormMethod.Post,new{enctype= "multipart/form-data" })) 
{ %> 
<%: Html.ValidationSummary(true) %> 

<fieldset> 
    <legend>PictureModel</legend> 

    <div class="editor-label"> 
     <%: Html.LabelFor(model => model.PrivacyTypeID) %> 
    </div> 
    <div class="editor-field"> 
     <%: Html.DropDownList("PrivacyTypeID", null, new { name = "PrivacyTypeID", title = "Please select privacy type.", id = "PrivacyTypeID" }) %> 
     <%: Html.ValidationMessageFor(model => model.PrivacyTypeID) %> 
    </div> 
    <div> 
     Upload Image: <input type="file" name="File1" /> 
    </div>   
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 

,這裏是頁面的控制器:

[HttpPost] 
    public ActionResult AddPicture(Guid id, PictureModel model, HttpPostedFileBase File1) 
    { 
     try 
     { 

      if (ModelState.IsValid) 
      { 
       var file = Request.Files[0]; 
       try 
       { 
        Guid albumid = id; 

        if (File1 != null) 
        { 

.....

任何人都可以請指導我做什麼我錯了?我什麼都試過,但沒有結果

回答

0

改變這一行:

Upload Image: <input type="file" name="File1" id="File1" /> 

而改變這一點:

public ActionResult AddPicture(Guid id, PictureModel model, HttpPostedFile File1) 
+0

另外,您應該可以直接使用File1而不是Request.Files [0]。模型綁定的岩石:) – Antevirus 2013-05-03 11:48:35

+0

沒有東西仍然是空的.. – user2191421 2013-05-03 13:34:07

+0

是的,我知道我只是用它來測試目的Request.Files [0]。 – user2191421 2013-05-03 13:34:59

0

一對夫婦的事情,這裏要注意的是可能是錯誤的,或者不正確的方法做到這一點:

  1. 在哪裏應該設置Guid id。 Html.Hidden(yourid);Html.HiddenFor(model => model.id); < - 確保在模型後面設置模型,例如, :

    public ActionResult Index(){ 
        PictureModel p = new PictureModel(); 
        p.id = Guid.NewGuid(); 
        return View(p); 
    } 
    
  2. 使用的下拉列表的正確方法和你的映射是錯的太這裏:

正確的方法是使用:

DropDownListFor(model => model.PrivacyTypeID, model => model.selectListOfPrivacyTypes, "-- Select Privacy Type --"); 

如果你確實想要使用dropdownlist方法,那麼您應該使用名稱PictureModel.PrivacyTypeID而不是PrivacyTypeID來讓映射工作支撐erly

我不確定它是否會解決文件操作爲空的問題,但它將確定是更好的代碼。