私はちょうどこの問題に対処してきました。結局のところ、のコードにTryUpdateModel
は何の問題もありませんが、 がValueProvider
与えるものに完全に依存しています。
AJAX(私の場合も)に関してJsonValueProviderFactory
は、レスポンスを解析し、メソッドを実行するコントローラーに値を与える人である可能性が非常に高く、コントローラーTryUpdateModel
はそこにある値を決して見つけられません。値プロバイダーによって提供されたプロパティに基づいて宛先モデルのみを更新するためTryUpdateModel
、空になったコレクションには触れません。これらのプロパティはプロバイダーによってまったく送信されないためです。
これを実現するコードは の次の行でJsonValueProviderFactory
、サイズがゼロの配列では値がバッキング ストアに追加されないため、プロパティが「消失」します。
2012 年 1 月の ASP.NET Codeplex サイト ( Json Request with empty array ) でこのバグのレポートを見つけ、wallymathieu (送信者) がそれを処理するパッチを提供しました。これは、パッチの関連部分です。
//BEGIN CHANGE
if (l.Count == 0) {
AddToBackingStore(backingStore, prefix, null);
}
else for (int i = 0; i < l.Count; i++) {
//END CHANGE
彼がここで行っているのは、配列が空として送信されたときに null 値を持つプロパティを追加することです。
ValueProviderFactory
そこに公開されているコードを使用して独自のコードを作成し、Global.asax
ファイルApplication_Start
メソッドでこれを行うことでアプリケーションに接続できます。
ValueProviderFactories.Factories.Remove(ValueProviderFactories.Factories.OfType<JsonValueProviderFactory>().FirstOrDefault());
ValueProviderFactories.Factories.Add(new YourOwnJsonValueProviderFactory());
これで私の問題は解決しました。あなたと将来のTryUpdateModel'ersにも解決されることを願っています。