上传文件ASP MVC 4.0
本文关键字:MVC ASP 文件 | 更新日期: 2023-09-27 18:11:11
我试图上传一个文件与ASP MVC4,我给你我的情况:
- 我有一个模型类"电影"与一些属性(不重要)
- 我想添加一些代码到我的控制器和视图部分,而不触及模型,因为我们想使图像不同于模型。
那么,这是我的视图代码的一个例子,我将加粗我添加的行:
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Movie</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Duration)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Duration)
@Html.ValidationMessageFor(model => model.Duration)
</div>
//ADDED BY ME:
<div class="editor-label">
<p>Select a file</p>
</div>
<div class="editor-field">
<input type="file" name="fileUpload" />
</div>//END OF MY CODE
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
所以你可以看到,我有一些代码生成的ASP,它允许我添加一个新的用户数据库,和一个"输入"添加到我上传的图像。
问题是,当我试图从控制器中恢复该图像时,"请求。文件"属性是空的,所以我不能恢复任何图像,当然我不能上传它,这是我的控制器代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Movie movie)
{
if (ModelState.IsValid)
{
db.MovieContext.Add(movie);
db.SaveChanges();
foreach (string file in Request.Files)
{
var postedFile = Request.Files[file];
postedFile.SaveAs(Server.MapPath("~/UploadedFiles") + pelicula.Id);
}
return RedirectToAction("Index");
}
return View(movie);
}
不知道为什么"请求"。文件"是空的,所以如果有人可以帮助我,那就太好了,非常感谢
尝试如下:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Movie movie, HttpPostedFile fileUpload)
{
if (ModelState.IsValid)
{
db.MovieContext.Add(movie);
db.SaveChanges();
var postedFile = fileUpload;
postedFile.SaveAs(Server.MapPath("~/UploadedFiles") + pelicula.Id);
return RedirectToAction("Index");
}
return View(movie);
}
让我们看看是否能找出问题所在。尝试以下命令并显示错误:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Movie movie, HttpPostedFile fileUpload)
{
if (ModelState.IsValid)
{
db.MovieContext.Add(movie);
db.SaveChanges();
var postedFile = fileUpload;
postedFile.SaveAs(Server.MapPath("~/UploadedFiles") + pelicula.Id);
return RedirectToAction("Index");
}
var content = "";
foreach (ModelState modelState in ViewData.ModelState.Values)
{
foreach (ModelError error in modelState.Errors)
{
content += error.ErrorMessage + ", " + error.Exception + "<br/>";
}
}
return Content(content);
//return View(movie);
}
Antevirus有答案,但我必须深入研究评论才能找到答案。简而言之,问题在于我没有为我的表单指定任何编码也就是
enctype = "multipart/form-data"
下面是完整的代码:
@using (Html.BeginForm("Create", "Members", FormMethod.Post, new { @id = "member-form", @enctype = "multipart/form-data" }))
{
<div class="form-group">
<label class="control-label col-md-2">Picture</label>
<div class="col-md-10">
<input id="fileUpload" type="file" name="fileUpload" class="file-loading">
</div>
</div>
}
我使用文件输入引导