我需要一个动作来创建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.Files
是null
所以我无法使用它,我不知道为什么。文件IEnumerable<HttpPostedFileBase>
也为空。然后我试着从FormCollection
开始
所以我用这个:
string filePath = collection.GetValue(item.Name).AttemptedValue;
但是filePath
刚刚返回的文件名称不是文件路径,我不明白。当我选择文件时,我可以看到输入中的所有路径,但是当我想要获取它时,只返回文件名。我的问题在哪里?你的建议是什么?
答案 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