UpdateModel
ASP.NET MVCのメソッドの観点から、皆さんが「正しい動作」と見なされるべきだと感じていることを知りたいと思います。
私がここで尋ねる理由は、おそらくこの機能が「設計による」ものであるかどうか、誰かがそれがそのようになっている理由を明確にすることができ、おそらくそれを別の方法で呼び出して目的の機能を実現する方法であると思います。人々の%はこれが機能することを望みますか?
本質的に、私の不満は、内のバインディングプロセスの動作にありますUpdateModel
。
フォームのデータフィールドがデータベース内のモデルを反映する単純なアクションメソッドを介してフォームを更新する場合Save
、最初にリクエストを保存するために、DBから既存のモデルを取得してから、関連するフィールドを更新します。これらは変更され、経由で送信され、既存のモデルにFormCollection
更新されました。UpdateModel
この機能は機能しますが、このDBが入力されたオブジェクトの既存のプロパティのいずれかが「リセット」されているようです。つまり、明らかに新しいオブジェクトと一致するものを除いて、それがまったく新しいオブジェクトであるかのように、nullまたは初期化のデフォルトに設定されているということFormCollection
です。
これは問題です。これは、オブジェクトに存在するが、必ずしもフォームに存在するとは限らない既存のプロパティ(子コレクションやオブジェクト、日付、UIに面していないフィールドなど)が空であり、半分のデータが残っているためです。おそらくIDのスタックを含むすべての欠落データが0に設定されているため、DBに保存できない使用不可能なオブジェクト。
これは望ましくない動作であり、でUpdateModel
プロパティが一致する場合にのみプロパティを更新する必要があると思いますFormCollection
。これは、既存のすべてのプロパティは変更されないが、更新は設定されることを意味します。ただし、これまでに推測されたことから、明らかにそうではありません。オブジェクトの新しいコピーがフォームからプロパティを更新し、新しいオブジェクトを返すように見えます。
最後に、これがどれほどの負担であるかという観点から言えば、半複雑なフォームを保存し、既存のすべてのオブジェクトデータを保持するための唯一の方法は、各プロパティを対応するフォームプロパティと手動で結合することです。フォームに存在するプロパティのみが更新されることを保証します。
私は推測する、
- これに同意する人は設計によるものですが、私の形のアプローチは最良の方法と結婚していますか?
- または、これでどのようにこれに取り組みましたか?
この人たちについて、お気軽にご意見をお聞かせください。ありがとうございます。
この問題に苦しんでいる人の別の例を次に
示します。複雑なデータ型のコレクションを使用してUpdateModelを呼び出すと、バインドされていないすべての値がリセットされますか?