コントローラにFormCollectionとIList を渡す
-
19-08-2019 - |
質問
ユーザーが入力する同じアイテムの数をユーザーが指定できるいくつかの要素を含む、ユーザーが入力するデータ入力フィールドのヒープ全体を含むフォームがあります。これは、PhilHaackのブログエントリ
JQueryを使用して、追加のフォーム要素を作成したり、正しくインデックスを付けたりすることに成功しています。私の問題は、コントローラー内でこれらを実際に読み取るための最良の方法です。この記事のコントローラーは、IList<Product>
という1つのオブジェクトのみを予期していますが、私のコントローラーはすでにFormCollection form
を予期しているため、IList<Itmes>
も送信しようとしています。
これをコントローラーが期待するパラメーターに追加するか、form ["items"]などを介してアクセスする必要がありますか?
表示 ジェネラコディセタグプレ
コントローラー ジェネラコディセタグプレ
DTO ジェネラコディセタグプレ
解決 2
フレームワークによってリストにマッピングされているFormCollection
やその他のデータを使用して渡されるデータで水を濁らせるのではなく、FormCollection
のみを使用することにしました。以下のコードは、アイテムを取得し、DTOを手動でハイドレイトします。これはうまく機能し、リストに直接マッピングすることができなかったコード内で他のいくつかのことを行うことができます。
ジェネラコディセタグプレ
他のヒント
次のようにmyItemをパラメータとして追加できます: ジェネラコディセタグプレ
フォームデータから自動的にバインドされ、myItemパラメータに入力されます。
私はこれを試したことがないので、試してみる必要がありますが、UpdateModelまたはTryUpdateModelメソッドを使用してみませんか?これは、IListをコントローラーのアクションに渡すのと同じ方法でバインドする必要があります。
つまり: ジェネラコディセタグプレ
私は開発用コンピューターを使用していないので、動作するかどうかはわかりませんが、動作するはずです。必要なものかどうか教えてください。
編集:エンティティフレームワークを使用している場合、UpdateModelメソッドで多くの問題に遭遇し、独自のメソッドを作成することに頼ったことは注目に値します。