問題タブ [custom-model-binder]

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 投票する
4 に答える
26512 参照

c# - プロパティのカスタムモデルバインダー

次のコントローラーアクションがあります。

MyModelこのように見える場所:

したがって、DefaultModelBinderはこれを問題なくバインドする必要があります。唯一のことは、バインディングに特別な/カスタムバインダーを使用したいということですPropertyB。また、このバインダーを再利用したいと思います。したがって、解決策は、もちろん機能しないPropertyBの前にModelBinder属性を配置することだと思いました(ModelBinder属性はプロパティでは許可されていません)。私は2つの解決策を見ます:

  1. モデル全体ではなく、すべてのプロパティでアクションパラメータを使用するには(モデルには多くのプロパティがあるため、これは好ましくありません)、次のようになります。

    /li>
  2. 新しいタイプを作成するにMyCustomType: List<int>は、このタイプのモデルバインダーを登録します(これはオプションです)

  3. たぶん、MyModelのバインダーを作成し、オーバーライドBindPropertyして、プロパティが"PropertyB"カスタムバインダーでプロパティをバインドしている場合。これは可能ですか?

他に解決策はありますか?

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

asp.net-mvc - ASP.NET MVC2 - カスタム モデル バインダーの例

処理する必要がある独自のバインディング シナリオ用にカスタム モデル バインダーを構築する例をいくつか見つけようとしていますが、見つけた記事はすべて、MVC2 には関係のない古いバージョンの MVC に関するものでした。私は DefaultModelBinder ソース コードを参照して、何をする必要があるかについて一般的な感覚を得ようとしましたが、私のシナリオよりも完全に複雑であり、実装する必要がある特定のロジックを分離するのに問題があります。

私の目標は、チェックボックス/テキストボックスのペアのコレクションを取得することです。すべてのチェックボックスのペアに対して、チェックボックスの値と関連するテキストボックスの値のキーと値のペアを作成したいと考えています。このデータを集約した後、目的のモデル タイプの文字列プロパティに格納できるように、コレクションに対して文字列のシリアル化を行う必要があります。特定のチェックボックスを特定のテキストボックスに関連付けることができる管理可能な形式でフォームから送信されているデータは既にあります。必要な場所にあるすべての部分を取得する方法を理解するだけです。

カスタム モデル バインダーの構築を開始できる最新のチュートリアルを知っている人はいますか?

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

asp.net-mvc-2 - ASP.NETMVC2-モデルバインダーのパラメーター属性を解決する

次のようなアクションが与えられます:

ModelBinder内valueののインスタンスを解決する方法はありますか?CustomAttribute私はMVCソースを調べていましたが、間違っている可能性がありますが、複雑なモデルのBindAttributeを取得するコードを複製しようとしたときに、GetAttributes()を呼び出しても探している属性が返されませんでした。

DefaultModelBinder

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

asp.net-mvc - ASP.NET MVC - 配列を処理できるカスタム モデル バインダー

ユーザーが任意の形式で価格を入力できるようにする機能を実装する必要があります。つまり、入力として 10 米ドル、10 ドル、10 ドルなどを許可する必要があります。

Price クラスのカスタム モデル バインダーを実装することで、これを解決したいと考えています。

フォームには配列または Price がキーとして含まれています

ViewModel には Price プロパティが含まれています。

デフォルトのモデル バインダーは、ユーザーが 10 進数に変換可能な文字列を [値] 入力に入力する限り、うまく機能します。「100 USD」のような入力を許可したいと思います。

これまでの価格タイプの私のModelBinder:

配列を正しく処理するカスタム モデル Binder を実装するにはどうすればよいですか?

0 投票する
4 に答える
36909 参照

asp.net-mvc - Asp.netMVCのカスタムDateTimeモデルバインダー

タイプ用に独自のモデルバインダーを作成したいと思いDateTimeます。まず、次のようにモデルプロパティにアタッチできる新しい属性を記述します。

これは簡単な部分です。しかし、バインダー部分はもう少し難しいです。タイプの新しいモデルバインダーを追加したいと思いDateTimeます。私はどちらかができます

  • IModelBinderインターフェイスを実装し、独自のBindModel()メソッドを作成します
  • メソッドを継承しDefaultModelBinderてオーバーライドするBindModel()

私のモデルには、上記のようなプロパティがあります(Birth)。したがって、モデルがリクエストデータをこのプロパティにバインドしようとすると、モデルバインダーBindModel(controllerContext, bindingContext)が呼び出されます。すべて大丈夫ですが。日付を正しく解析するために、controller / bindingContextからプロパティ属性を取得するにはどうすればよいですか?どうすればPropertyDesciptor物件のに行くことができますBirthか?

編集

関心の分離のため、私のモデルクラスは、System.Web.MVCアセンブリを参照しない(そして参照すべきではない)アセンブリで定義されています。カスタムバインディング(Scott Hanselmanの例と同様)属性を設定することは、ここでは不要です。

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

asp.net-mvc - ActionFilter 内のモデルの可用性

作成中の ASP.NET MVC アプリケーション用に新しい ActionFilter を作成しました。Http Post を受け入れるアクションがあり、アクション メソッドの引数は、カスタム モデル バインダーを作成して登録したオブジェクトを受け入れます。

モデル バインダーが常にアクション フィルターメソッドの前に呼び出されるように見えるという事実にもかかわらずIActionFilter.OnActionExecuting、値の内部にfilterContext.Controller.ViewData.Modelは常にあることに気付きました。これとは対照的に、同じアクション フィルターのメソッド内では、値は null ではありません。nullOnActionExecutingIActionFilter.OnActionExecutedfilterContext.Controller.ViewData.Model

これが設計によるものなのか、バグなのか、皆さんは知っていますか? 設計上、これが理由を説明するリンクがある場合は? ありがとう。

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

c# - モデル バインディングのカスタム タイプ

System.Nullable タイプのように機能する構造体があります。

ASP.NET MVC バインディングで使用しようとしています。デフォルトの顧客モデル バインダーを使用すると、プロパティは常に null になります。すべてのフォーム入力名の末尾に「.Value」を追加することでこれを修正できますが、ある種のカスタム モデル バインダーを使用して直接新しい型にバインドしたいだけですが、私が試したすべてのソリューションは不必要に複雑に見えました. デフォルトのバインダーを拡張し、数行のコードで、暗黙的な変換を使用してプロパティ バインディングをモデル全体に​​リダイレクトできるはずだと思います。デフォルト バインダーのバインディング パラダイムはよくわかりませんが、モデルとモデル プロパティのこの区別に固執しているようです。これを行う最も簡単な方法は何ですか? ありがとう!

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

asp.net-mvc - ASP.NET MVC 2+ のモデル バインダーで DI/IoC コンテナーを使用する方法は?

User エンティティがあり、コンストラクターでその CreationTime プロパティを DateTime.Now に設定するとします。しかし、単体テストの採用者であるため、 DateTime.Now に直接アクセスするのではなく、 ITimeProvider を使用します。

ASP.NET MVC 2.0 アプリケーションで NInject 2 を使用しています。UserController と 2 つの Create メソッド (GET 用と POST 用) があります。GET 用のものは単純ですが、POST 用のものはそれほど単純ではなく、それほど前向きでもありません:P を構築できるようにするために、ITimeProvider の実装の参照を取得するようにモデル バインダーをいじる必要があるためです。ユーザー インスタンス。

また、デフォルトのモデル バインダーのすべての機能を保持できるようにしたいと考えています。

このシンプル/エレガント/その他を解決する機会はありますか? :D

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

asp.net-mvc-2 - DataAnnotations の検証とカスタム モデル バインダー

次のモデルを受け入れるアクション メソッドがあります - LanguagesViewModel:

また、POST データを にバインドするためのカスタム モデル バインダーもありますIEnumerable<LanguageItem>

問題は、DataAnnotations の検証を機能させるにはどうすればよいかということです。

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

asp.net-mvc-2 - Global.asax以外の場所にカスタムモデルバインダーを登録できますか?

特定のコントローラーアクションメソッドまたはそのコントローラー全体に対して、カスタムモデルバインダーの範囲を制限すると便利です。ハンゼルマンは、カスタムモデルバインダー登録の代替場所を暗示する文を書きましたが、考えを終わらせることはなかったようです。

Global.asaxに登録することで、このカスタムモデルバインダーにすべての日時を管理させることができます。

コントローラーシステムのより狭い範囲でこれらの登録を行うことは可能ですか?もしそうなら、Global.asax MvcApplicationの外でそうすることを避ける理由はありますか(例えば、パフォーマンス上の理由)?