2012-05-16 119 views
0

我需要一個動作來創建MyModel類型的一些字段,還有一些文件要上傳到數據庫。所以這是我的視圖的一部分:上傳文件在MVC 3

@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.Filesnull所以我不能使用它,我不知道爲什麼。還有文件IEnumerable<HttpPostedFileBase>爲空。然後我試着從FormCollection 得到,所以我用這個:

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

filePath只是返回的文件名不是文件的路徑,我不明白。當我選擇文件時,我可以看到輸入中的所有路徑,但是當我想要得到它時,只需返回文件Name。我的問題在哪裏?你的建議是什麼?

回答

1

您應修改您的視圖以包括多部分/格式數據:

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