web-dev-qa-db-ja.com

MVC 5で画像をアップロードしている間、Re​​quest.Files.Countは常に0です

いくつかの文字列フィールドと画像を含むモデルにPostコントローラーがあります。完全に同一のコードはMVC4で機能しますが、MVC 5ではRequest.Files.Countは常に0です

私のモデルには、HttpPostedFileBaseではなく画像のbyte []があります

私の見解:

@using (Html.BeginForm("Create", "HotelManager", FormMethod.Post, new { enctype = "multipart/form-data", data_ajax = "false" }))
{
    @Html.AntiForgeryToken()
    @Html.TextBoxFor(model => model.Title, new { @class = "form-control" })
    @Html.TextAreaFor(model => model.Description, new { @class = "form-control", @rows = "7" })
    <input type="file" class="form-control filestyle">
    <input type="submit" value="Submit" class="btn btn-block" />
}

Data_ajax = "false"を省略しようとしましたが、使用しません。

私の投稿コントローラーは次のとおりです。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "Title,Description,Image")] Hotel hotel)
    {
        if (ModelState.IsValid)
        {
            // deal with the uploaded file
            if (Request.Files.Count > 0)
            {
                HttpPostedFileBase file = Request.Files[0];

                if (file != null && file.ContentLength > 0)
                {
                    // Code to process image, resize, etc goes here
                }
            }

        // Other code to add the hotel to db goes here
    }

デバッガーでは、Request.Files.Countが常にゼロであることがわかりますが、その理由はわかりません。ビューとコントローラーの両方のコードを、正常に機能する別のMVC4プロジェクトからコピーしました。

Key Value
Request POST /HotelManager/Create HTTP/1.1
Accept  text/html, application/xhtml+xml, */*
Referer http://localhost:4976/HotelManager/Create
Accept-Language en-US,en;q=0.5
User-Agent  Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; ASU2JS; rv:11.0) like Gecko
Content-Type    multipart/form-data; boundary=---------------------------7de207070a24
Accept-Encoding gzip, deflate
Host    localhost:4976
Content-Length  946
DNT 1

そして、IE Developerウィンドウで、フォームの本文が空であることがわかります。

24
indichimp

私は非常に多くの時間を無駄にし、名前属性も使用するだけでよいことが判明しました

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

私の新しいプロジェクトには名前属性がありませんでした。

45
indichimp

Postメソッドを変更する必要があります

追加する必要があります:

new { enctype = "multipart/form-data" }

完全なフォームタグはこちら

@using (Html.BeginForm("Cars", "Expense", FormMethod.Post, 
      new { enctype = "multipart/form-data" }))

複数のファイルを投稿する方法をご覧ください

39
Ali Adravi

追加するにはpostメソッドを変更する必要があります。

追加する必要があります:

new { enctype = "multipart/form-data" }

完全なフォームタグはこちら

@using (Html.BeginForm("Cars", "Expense", FormMethod.Post, 
      new { enctype = "multipart/form-data" }))

これらの行は不可欠です。それらがないと、タイプファイルの入力を保存できません。私はそれを理解しようとして6時間座った。

11
Sanvir

Request.Files.Countが0になる理由の1つは、Web.configファイルで指定されたmaxRequestLengthよりも大きいファイルをアップロードしようとしたときです。 Request.Files.Countに問題がある場合は、この値を確認してください。

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="4096" />
  </system.web>
</configuration>

更新:この回答はOPの問題に直接関連していない可能性がありますが、GoogleはRequest.Files.Count = 0問題のこの投稿のトップをリストしているので、私のために働いた答えを投稿しました。

2