0

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によって生成されたコードと、画像をアップロードするために追加された「入力」があることがわかります。

問題は、コントローラーからその画像を回復しようとすると、「Request.Files」属性が空であるため、画像を回復できず、もちろんアップロードもできないことです。コントローラーコードは次のとおりです。

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

「Request.Files」が空である理由がわからないので、誰かが私を助けることができれば、どうもありがとう

4

3 に答える 3

3

以下を試してください:

[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);
}
于 2013-04-29T07:10:30.393 に答える
0

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>
}

ブートストラップにファイル入力を使用しています

于 2015-09-04T11:14:11.583 に答える