2013-04-02 466 views
1

它看起來與其他問題類似,但他們遇到的所有問題都是命名HTML中的輸入類型名稱=「file」和控制器中的參數名稱不匹配。我多次檢查並重新檢查了很多事情,但HttpPostedFileBase的值始終返回爲null,這導致控制器中出現NullReferenceException。 下面是代碼: - HTML代碼: -爲什麼我的HttpPostedFileBase總是空?

@using (Html.BeginForm(new { enctype = "multipart/form-data" })) 
    { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Please Fill in the following details and Upload your Design Pic</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.chest) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.chest) 
     @Html.ValidationMessageFor(model => model.chest) 
    </div> 
    <p> 
     <label for="file">Design File Pic:</label> 
     <input type="file" name="file" /> 
    </p> 
    <p> 
     <input type="submit" value="Order" /> 
    </p> 

在控制器: -

[HttpPost] 
    [Authorize] 
    public ActionResult Index(DesignOrder order, HttpPostedFileBase file) 
    { 
     string fileurl=null; 
     if (file.ContentLength > 0) { 
      fileurl = Path.Combine("../../Images/UserUploads",User.Identity.Name + file.FileName); 
      file.SaveAs(fileurl); 
     } 
    } 

錯誤進來行,如果(file.ContentLength> 0) - 的NullReferenceException。

回答

3

因爲Html.BeginForm(object)用於RouteValues,而不是元素屬性。您需要爲屬性使用更大的重載。試試這個:

Html.BeginForm("action", "controller", null, FormMethod.Post, new { enctype = "multipart/form-data" }) 

在這裏看到我的意思:http://msdn.microsoft.com/en-us/library/dd470793(v=vs.108).aspx