我正在尝试将图片与其他字段一起上传。一直关注here和here
中的示例然而,似乎图像对象没有传递给控制器,我无法找到任何错误。
以下是观点:
@model Project.Models.ContentNode
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm("Create", "News", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>News</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
@*Image upload field*@
<div class="editor-field">
<input type="file" name="file" />
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Body)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Body)
@Html.ValidationMessageFor(model => model.Body)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
以下是控制器方法:
public ActionResult Create()
{
var model = new ContentNode();
return View( model );
}
[HttpPost]
public ActionResult Create(ContentNode nyF, HttpPostedFileBase imageData)
{
// Get the type of content from DB
var k = (from ct in _db.ContentTypes
where ct.ID == 1
select ct).Single();
var curUser = (from u in _db.Users
where u.Username == User.Identity.Name
select u).Single();
nyF.Author = curUser;
nyF.ContentType = k;
nyF.dateCreated = DateTime.Now;
_db.ContentNodes.Add(nyF);
_db.SaveChanges();
// Process image
if ((imageData != null && imageData.ContentLength > 0))
{
var fileName = Path.GetFileName(imageData.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
imageData.SaveAs(path);
}
else
{
return Content("The image object wasn't received");
}
return View(nyF);
}
我一遍又一遍地阅读了整个事情,我无法看到错误。这里有人愿意指出我做错了吗?
答案 0 :(得分:5)
输入文件的名称需要与操作参数
匹配<input type="file" name="file" />
应该是
<input type="file" name="imageData" />
或您更改操作参数名称
public ActionResult Create(ContentNode nyF, HttpPostedFileBase file)
答案 1 :(得分:0)
您可以使用post方法中的Request.Files上传文件。 您可以使用以下代码验证上传的文件。
Request.Files [0] .ContentLength