0

我需要一个操作来创建MyModel包含一些字段的类型以及一些要上传到数据库的文件。所以这是我观点的一部分:

@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" />
}

但是在操作后我在获取文件路径时遇到了一些问题:这是我的操作:

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

 //....
 }

Request.Files所以null我不能使用它,我不知道为什么。文件也IEnumerable<HttpPostedFileBase>为空。然后我尝试从中获取,FormCollection 所以我使用它:

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

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

4

3 回答 3

1

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

一旦你这样做了,看看这个:

尝试使用 ASP.NET MVC 上传文件

那应该涵盖您的问题吗?

于 2012-05-16T08:22:26.487 回答
1

您应该修改您的视图以包含多部分/表单数据:

@using(Html.BeginForm("YourAction", "YourController", FormMethod.Post, new { enctype = "multipart/form-data" } )) {
   //....
}
于 2012-05-19T13:24:19.823 回答
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

于 2012-08-11T00:44:21.237 回答