2013-05-03 115 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

我不确定它是否会解决文件操作为空的问题,但它将确定是更好的代码。