1

asp.net mvc3 では、ビューモデル オブジェクトがデータベース内の適切な場所に送信された場所からデータベースに追加する汎用メソッドが必要です。これを行うために、投稿されたモデルを渡そうとしています。ただし、動的に行うのは少し難しいです。私はこれを試しましたが、うまくいきませんでした:

見る:

(psuedo)
begin form aiming at Add
 fields
input type = submit

コントローラーアクション

[HttpPost]
public ActionResult Add(dynamic model,...)

問題は、モデルが満たされないことです。非表示のフィールドはありますが、ヘルパーを使用してモデルによって定義された実際のフィールドはモデルに入りません。名前を付けるだけでmodelは、正しく並べられない可能性が高いことに気づきました。モデルを強く型付けしたかどうかは確かですが、(MyExplicitClass model,...)それは機能しますが、class1、class2、class3、class5、class8、class13 などを送信できるようにしたいため、動的アプローチが無効になります。

@model class21が送信されても​​、dynamic model(または同等の)オブジェクトがそのオブジェクトをキャプチャするという点で、これを機能させる方法はありますか?

4

1 に答える 1

2

いいえ。少なくとも、カスタム モデル バインダーを使用しない限り、そうではありません。

モデル バインディングのしくみについて根本的な誤解があります。ビューの @model に基づいてモデル バインディングが機能すると考えています。これは真実から遠く離れることはできませんでした。モデル バインドは、アクション メソッドで指定されたパラメーターを調べることによって機能します。

モデル バインダーが行うことは、アクション メソッドに指定されたパラメーターの型を調べてから、要求値 (クエリ文字列または投稿) を調べて、それらを一致させようとすることだけです。一致が見つかった場合は、オブジェクトをインスタンス化します。

ここで重要なのは、モデル バインダーがアクション メソッドのパラメーターで指定されたオブジェクトのみをインスタンス化することです。「動的」なオブジェクトは何ですか? それはわかりません。したがって、どのタイプも作成できません。

編集:

この質問は役に立つかもしれません

ポリモーフィック モデル バインディング

于 2012-04-15T21:31:40.937 に答える