問題タブ [modelbinders]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1961 参照

asp.net-mvc - 既定のモデル バインダーでリフレクションによって作成されたオブジェクトを使用する場合の ASP.NET MVC の問題

formCollectionが渡されたときにオブジェクトがUpdateModelで更新されないという ASP.NET MVC で奇妙な問題が発生しています。更新中のオブジェクトがリフレクションによって作成されている場合、 UpdateModelが正しく機能していないように見えます。

シナリオ: 約 50 のルックアップ テーブルを持つアプリケーションがあります。各ルックアップ テーブルには、id、title、description、isactive、createdon などの典型的なフィールドを含むまったく同じスキーマが含まれています。50 個のビューを作成するのではなく、すべてのルックアップ テーブルのデータを表示できる単一のビューが必要でした。IReferenceEntity というインターフェイスを作成し、ルックアップ テーブルを表す各 POCO に実装しました。

このインターフェイスを使用すると、ルックアップ テーブルのレコードをビューに簡単に取り込むことができます。(次の方法でアイテムをビューに渡します。)

データベースからビューまで、すべてが完璧に機能します。

ただし、投稿時にモデルを更新しようとすると、いくつかの問題が発生します。

次のようにオブジェクト参照を明示的に宣言すると、すべてが完全に機能し、オブジェクトの値がフォームの値で更新されます。したがって、データベースを更新できます。

残念ながら、オブジェクト タイプをハード コーディングすると、インターフェイスを使用する理由が完全に無効になります。

(アプリケーションの主な目的は、「特別な」ことを何もせずにルックアップ テーブルなどの新しいテーブルを動的に追加できるようにすることです。これは、読み込まれたアセンブリを反映し、特定のインターフェイスまたは基本クラスを実装するクラスを見つけることによって達成されます。 )

私の戦略は、ポストバック時にオブジェクトの具体的な型を決定し、リフレクションによってその型のインスタンスを作成することです。(型を決定するために私が使用するメカニズムはやや原始的です。フォーム内の非表示フィールドとして含めています。より良いアイデアを歓迎します。)

次のいずれかの方法でリフレクションを使用してオブジェクトのインスタンスを作成すると、UpdateModel によって更新されるオブジェクトはありません。

注: リフレクションによって作成されるオブジェクトがすべて適切なタイプであることを確認しました。

なぜこれが起こっているのか誰にも分かりますか?私はやや困惑しています。

私が本当に「苦労した」場合は、これらの参照エンティティ/ルックアップ オブジェクトのいずれかをインスタンス化するファクトリ オブジェクトを作成できます。ただし、これにより、新しいルックアップ テーブルを透過的に追加および検出できるようにするアプリケーションの機能が損なわれ、それほどクリーンではありません。

また、インターフェイスではなく、実際の ReferenceEntity 基本クラスから派生させることもできますが、これが違いを生むかどうかは疑問です。この問題は、リフレクションによって作成されたオブジェクトをモデル バインダーで使用する場合に発生するようです。

どんな助けでも大歓迎です。

アンソニー

0 投票する
3 に答える
156 参照

asp.net-mvc - MVC でのモデル バインディング

フォーム内にテキストボックスがあります。

[意見]

[コントローラ]

On Form Submit この場合、ViewData を送信せずにテキストボックスの値は維持されますが、値「何か」は設定されていません。

しかし、アクションを [Controller] に変更すると

値は保持されません。

そのパラメータで実際に起こっていること。

0 投票する
3 に答える
878 参照

asp.net-mvc - MVC モデル バインディング: メソッド パラメーターに QueryString とは異なる名前を使用する

与えられた URL:

http://www.stackoverflow.com/question ? 質問=123&回答=5

およびそれに対応する ActionMethod と Model:

QueryString と RequestObject のパラメーターが異なることに注意してください。デフォルトのバインディング動作でそれを達成できますか? カスタム バインダーを作成する必要がありますか?

ありがとう!

0 投票する
1 に答える
672 参照

asp.net-mvc - MVC はどのようにアクションを呼び出し、Request.Form をそのパラメーターにマップしますか

MVC が Method(Action) を呼び出し、Model Binder を使用して NamedValueCollection をそのメソッドのパラメーターにマップする方法と同様のものを作成する必要があります。基本的に、クラスのメソッドを動的に呼び出す必要があるコントローラーアクションがあります。コントローラーには、フォームまたはクエリ文字列で送信された情報と、呼び出すメソッドの名前が文字列として含まれています。

私に関する限り、それはアクションを呼び出すことと同じです。私は基本的にそれを別のレベルに渡しています(コントローラーでこれらのメソッドを使用できないのには十分な理由があります)。

ASP.Net MVC 1.0 ソースをダウンロードしましたが、たくさんのクラスがあり、これを処理するコードを見つけるのに苦労しています。

名前が文字列に含まれているメソッドを呼び出す方法は知っていますが、MVC が使用するより良い方法があるかもしれません。また、Model Binders を使用して Request.Form + Query Strings をそのメソッドのパラメーターにする方法も知っておく必要があります。

誰かがこれを行う MVC ソースのコードを教えてくれたり、MVC でデフォルトの Model Binder を手動で使用することに関して正しい方向を教えてくれたりしたら、私は感謝します。

これを明確にすることができるかどうか教えてください。

ありがとう

0 投票する
3 に答える
4411 参照

asp.net-mvc - カスタム モデル バインダーの ControllerContext から FormCollection を取得する

FormCollection (コントローラーから提供される) を取得する素晴らしい関数がありました。ここで、代わりにモデル バインドを実行し、モデル バインダーにその関数を呼び出してもらい、FormCollection が必要になるようにします。なぜか見つかる。だっただろうと思った controllerContext.HttpContext.Request.Form

0 投票する
2 に答える
413 参照

asp.net-mvc - ModelBinderで通過しないいくつかのフィールド

以下は私のコントローラーのコードです。

呼び出すビューには、Actorクラスに強く型付けされた部分ビューがあります。何らかの理由で、クラスにバインドされていないフィールドがいくつかあります。問題のフィールドは、Address、Address2、およびZipCodeです。それらはページに入力されますが、nullに戻ります。これらだけでなく、他のすべてのフィールドがあります。

何か案は?また、この動作を再現する単体テストを作成するにはどうすればよいですか?

public class Actor {public string MiddleName {get ; セットする;}

0 投票する
1 に答える
319 参照

asp.net-mvc - DataAnnotations v 3.5 用の DataAnnotationsModelBinder が必要です

System.ComponentModel.DataAnnotations v 3.5 で動作する DataAnnotationsModelBinder が必要です。codeplex で
見つけましたが、DataAnnotations の v 0.99 用で、v 3.5 では動作せず、xVal では動作しませんDataAnnotations v 0.99なので、ちょっと立ち往生しています

0 投票する
1 に答える
381 参照

c# - defaultmodelbinderでupdatecollectionをオーバーライドする

DefaultModelBinder既存の子エンティティを更新するのではなく、エンティティを子コレクションにバインドすると、新しいエンティティの作成に問題が発生します。この投稿で良い解決策のように見えるものを見つけましたが、MVCソースを変更する必要はありません。UpdateCollection私のカスタムが常にデフォルトよりも呼び出されるように、プロジェクトでこのメソッドをオーバーライドする方法を誰かに教えてもらえますか?