初めに
画像アップロードで、同じモデルの項目を一括で複数Postしようとした際に、Post処理が終わらないことがあったので原因を調査しました。
環境
- .NET Core2.2 ※ここ重要
- Visual Studio 2019
症状
submitでPostを実行すると、Postが完了せずに処理が終わらない。
また、メモリ使用量がどんどん上がっていく。
原因
・モデルと一緒にIFormFileをリストにすると起きます。
(View内にIFormFile用のタグを記載しなくても、コードがそうなっているだけで症状が出ます。)
↓↓ .NET Core2.2のバグらしいです。(GitHubのissueに載ってました)
IFormFile bind error when using in sub collection
対応
・ .NET Coreのバージョンを 2.1.7に戻すか、3.0にあげる。
・ モデルと一緒にせずに、IFormFileだけでListにする(IFormFileCollection使ってもいい)
再現方法
1. .NET Core2.2を使用する。
2. 適当にモデルを作成
Movie.cs
public class Movie
{
[Display(Name = "タイトル")]
public string Title { get; set; }
[Display(Name = "詳細")]
public string Detail { get; set; }
[Display(Name = "画像")]
public string Img { get; set; }
}
3. 上記のモデルと「IFormFile 」のプロパティを含むモデルを作成
Movie.cs
public class MovieWithPost
{
public Movie Movie{ get; set; }
// ↓ファイル受信用のプロパティを追加
public IFormFile FormFile { get; set; }
}
4. 上記で作成したモデルをリストにする
Movie.cs
public class MoviesViewModel
{
public List<MovieWithPost> MovieList { get; set; }
}
5. viewでsubmitでpostを行う(コードは割愛)
6. Postが完了しない