上传文件在MVC 3中

时间:2012-05-16 08:18:10

标签: asp.net-mvc asp.net-mvc-3 file-upload razor

我需要一个动作来创建MyModel类型,其中包含一些字段以及一些要上传到DB的文件。所以这是我的观点的一部分:

@using(Html.BeginForm()) {

<fieldset>
 <dl>
    <dt>
  @Html.LabelFor(model => model.Name)
</dt>
<dd>
  @Html.EditorFor(model => model.Name)
  @Html.ValidationMessageFor(model => model.Name)
</dd>
    <dt>
 @Html.LabelFor(model => model.NeededFiles)
</dt>
    <dd>
@foreach(var item in Model.NeededFiles) { 
 <div style="margin:5px;">
       @Html.Label(item.Title)
       <input type="file" name="@item.Name" />
 </div>
}
     </dl>
 </fieldset>
 <input type="submit" value="Create" class="button red" />
}

但是在post post中我有一些问题要获取文件路径: 这是我的行动:

[HttpPost]
public ActionResult Create(MyModel ViewModel FormCollection collection, IEnumerable<HttpPostedFileBase> files) {

 //....
 }

Request.Filesnull所以我无法使用它,我不知道为什么。文件IEnumerable<HttpPostedFileBase>也为空。然后我试着从FormCollection开始 所以我用这个:

   string filePath = collection.GetValue(item.Name).AttemptedValue;

但是filePath刚刚返回的文件名称不是文件路径,我不明白。当我选择文件时,我可以看到输入中的所有路径,但是当我想要获取它时,只返回文件名。我的问题在哪里?你的建议是什么?

3 个答案:

答案 0 :(得分:1)

您是否在表单标记上将enctype设置为multipart / form-data?我在那里看不到......

完成后,请看一下:

Trying to upload a file with ASP.NET MVC

那应该涵盖你的问题?

答案 1 :(得分:1)

您应修改视图以包含multipart / form-data:

@using(Html.BeginForm("YourAction", "YourController", FormMethod.Post, new { enctype = "multipart/form-data" } )) {
   //....
}

答案 2 :(得分:0)

看起来你错过了

@using(Html.BeginForm(“YourAction”,“YourController”,FormMethod.Post,new {enctype =“multipart / form-data”})){    // .... }

退房 - http://hozefam.com/post/2012/08/10/Exploring-File-Upload-and-Download-in-MVC-3.aspx