3

他のフィールドと一緒に画像をアップロードしようとしています。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);
        }

全体を何度も読み返しましたが、エラーが表示されません。私が間違っていることを指摘してくれる人はいますか?

4

2 に答える 2

5

入力ファイルの名前はアクション パラメータと一致する必要があります

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

する必要があります

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

または、アクションパラメーター名を変更します

public ActionResult Create(ContentNode nyF, HttpPostedFileBase file)
于 2012-10-21T20:14:59.487 に答える