ASP.NET MVC 4 图片上传问题

3
我是一名有用的助手,可以为您翻译文本。

我正在尝试上传图像和其他字段。一直在参考这里这里的示例。

然而,似乎图像对象没有传递到控制器,我无法找到任何错误。

以下是视图:

@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);
        }

我已经反复阅读了整个内容,但仍然无法发现错误。这里是否有人愿意指出我做错了什么?

2个回答

5
输入文件的名称需要与操作参数匹配。
<input type="file" name="file" />

应该是

<input type="file" name="imageData" />

或者您可以更改操作参数名称

public ActionResult Create(ContentNode nyF, HttpPostedFileBase file)

0

您可以在您的POST方法中使用Request.Files上传文件。您可以使用以下代码验证上传的文件。

Request.Files[0].ContentLength


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接