問題タブ [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.
asp.net-mvc - カスタム BindAttribute
独自の BindAttribute を実装する方法はありますか。BindAttribute から派生させるのが望ましいですが、独自の ModelBinder でそれを実装する必要がある場合は、どうすればよいでしょうか?
asp.net-mvc - datetime を構成要素に分解する ASP.NET MVC フォーム
私はこれについてWebを執拗に検索しましたが、何も見つかりませんでした.これは驚くべきことです。
基本的に、私のモデルにはDateTime
、ユーザーがフォームから入力したいフィールドがあります。Htmlヘルパーを使用して、フォームの他のすべての部分をレンダリングしています(検証とともに)
したがって、この質問は2つの部分に分かれています...
HTML ヘルパー
まず、Html ヘルパーを使用してDateTime
フィールドを分割し、日付の 3 つの構成部分 (日、月、年) としてレンダリングする方法はありますか (時間の部分は気にしないため)。これは、テキスト ボックス、ドロップダウン リスト、または両方の組み合わせとしてレンダリングできます。
モデルバインディング
次に、フォームが投稿されたときに、モデルにバインドするための最良の方法は何ですか? これに対する Scott Hanselmann のソリューションを見たことがありますが、必要なものに対して少し肥大化しているように見えます。もう少しエレガントなソリューションを望んでいました。それをデフォルトのバインダーとして拡張DefaultModelBinder
して設定することをお勧めします(すべての日付がこのように処理されるため)、またはそれを実装してタイプIModelBionder
のデフォルトのバインダーとして設定するクラスを作成しますか?DateTime
事前にすべての助けに感謝します:-) 私はMVCが大好きですが、とても些細なことで頭痛の種になっていることに腹を立てています!
asp.net-mvc-2 - ASP.Net MVC 2 - ディクショナリの ModelBinding の改善
いくつかの特殊なケースでは、実行前に ID がわからないテキストボックスのリスト (n - n 関連付けを処理するため) が必要になります。このようなもの: http://screencast.com/t/YjIxNjUyNmU
その特定のサンプルでは、カウントをいくつかの「テンプレート」に関連付けようとしています。
ASP.Net MVC 1では、Dictionary ModelBinder をコーディングして、クリーンで直感的な HTML を作成しました。次のようなことが許可されました:
バインダーのコードは次のとおりです。
ASP.Net MVC 2に渡すとき、問題はValueProviderがもはや辞書ではないことです。私が行ったように、値をループして解析する方法はありません。
そして、私はそうする他の方法を見つけられませんでした(知っているなら教えてください).
私は最終的に辞書をバインドする「標準」の方法に切り替えましたが、HTML は見苦しく、直観に反し (カウンターを使用してインデックスのないコレクションをループしますか??)、必要な動作とは異なり、すべての値が必要です (そしてそのASP.Net MVC で完全に機能しました 1)。
次のようになります。
ModelState
コントローラーでは、「値が必要です」というエラーを回避するために、をだます必要があります。
これは難しすぎます。私はすぐにこの種のバインディングを何度も使用する必要があり、おそらくいくつかの層の開発者がアプリケーションで作業する必要があります。
質問 :
- それをより良くする方法を知っていますか?
私が必要としているのは、IMO は、より良い html を許可し、すべての値が必要であることを考慮しない辞書用の ModelBinder です。
asp.net-mvc-2 - モデルバインディングと派生モデルクラス
ASP.NET MVCは、他のモデルクラスを継承するモデルクラスがある場合に、モデルバインディングを機能させる簡単な方法を提供しますか?
私のシナリオでは、に強く型付けされたビューがありますList<Person>
。
Person
、つまりPersonTypeOne
とを継承するクラスがいくつかありますPersonTypeTwo
。
これらのクラス名と一致する名前を持つ(そしてそれぞれのモデルのプロパティのフォーム要素をレンダリングする)3つの強く型付けされた部分ビューがあります。
これは、メインビューで次のコードを使用できることを意味します。
これは、ユーザーがフォームを送信する場合を除いて、関連するコントローラーアクションメソッドが、、およびのリストではなく、を取得する場合を除いて、うまく機能しList<Person>
ます。Person
PersonTypeOne
PersonTypeTwo
PersonTypeOne
フォームの送信には、デフォルトのモデルバインダーにおよびPersonTypeTwo
クラスのインスタンスを作成するように指示するのに十分な情報が含まれていないため、これはほぼ予想どおりです。
それで、デフォルトのモデルバインダーからそのような機能を取得する方法はありますか?
asp.net-mvc - ASP.NETMVC-子エンティティをモデルにバインドする
これは私には痛々しいほど明白に思えますが、何らかの理由で私はそれを私が望むように動作させることができません。おそらく私がそれをしている方法は不可能ですが、それはありそうもないようです。この質問は多少関連している可能性があります:同じページ上のASP.NETMVCモデルバインディング関連エンティティ。
複数の関連するエンティティ参照を持つエンティティを編集するためのEditorTemplateがあります。エディターがレンダリングされると、ユーザーには関連するエンティティを選択するためのドロップダウンリストが表示され、ドロップダウンリストはその値としてIDを返します。
リクエストが送信されると、フォームの値は期待どおりに「Entity.ID」という名前になりますが、アクションパラメータとして定義された強く型付けされたモデルには、リクエストで渡された値が入力されたEntity.IDがありません。
Bind()属性をいじってBind(Include = "Entity.ID")
、entityWithChildEntitiesで指定してみましたが、うまくいかないようです。私も試しBind(Include = "Entity")
ましたが、その結果、ModelBinderは完全な「エンティティ」定義をバインドしようとしました(当然のことながら)。
子エンティティIDを埋めるためにデフォルトのモデルバインダーを取得する方法はありますか、または各子エンティティのIDにアクションパラメーターを追加してから、値をモデル定義に手動でコピーする必要がありますか?
asp.net-mvc - ASP.NET MVC - インターフェイス タイプのカスタム モデル バインダー
この動作が想定されているかどうかはわかりませんが、バインドがインターフェイス タイプに割り当てられている場合、カスタム モデル バインドは機能しないようです。誰かがこれを実験しましたか?
上記のコードでは、タイプ SomeModel のモデルにバインドすると、MyCustomModelBinder がヒットすることはありません。ただし、上記のコードを変更し、まったく同じフォームを置き換えtypeof(ISomeModel)
て投稿すると、MyCustomModelBinder が期待どおりに呼び出されます。typeof(SomeModel)
それは正しいと思いますか?
編集
最初にこの質問をした後、1 年以上この苦境に陥っていましたが、今ではうまくいく解決策があります。ありがとうマット・ハイディンガー!
validation - カスタムモデルバインダー内でMVC検証属性を使用できますか?
モデルにMVC検証属性がたくさんあります。defaultModelBinderが送信時にモデルをバインドすると、すべてがうまく機能します。ただし、カスタムモデルバインダーを作成する必要があります。検証属性を引き続き使用したいと思います。できますか?もしそうなら、どのように?
validation - MVC 2、カスタムModelBinder、およびビューの「試行された値」の保存
以前はサーバーからクライアントにラウンドトリップし、うまく戻ったオブジェクトがあります(つまり、フォームの編集と表示は正常に機能しました)。ただし、そのオブジェクトに複合型を追加し、それを処理するためのカスタムModelBinderを作成しました。複合型は単一の文字列として表すことができますが、オブジェクトには10進数として格納されます(「0ft。3in。」は0.25として格納できると考えてください)。
ただし、私の問題は、検証が失敗した場合です。ユーザーが「asdf」と入力すると、検証は失敗します。ただし、Decimalに格納されるのは0だけです。したがって、ビューがレンダリングされてユーザーに送信されると、「asdf」ではなく「0」とエラーメッセージが表示されます。デフォルトのModelBinderではこの問題は発生しません(他のフィールドは無効な文字列を問題なくラウンドトリップします)。したがって、カスタムModelBinderに何かが欠けている必要があります...しかし、それは何ですか?
電話してみました
しかし、それは何にも影響を与えていないようです。
c# - ASP.NET MVC モデルのリストへのバインド
私の ASP.NET MVC サイトでは、一部の機能により、ユーザーは特定の会場が開いている時間を入力できます。
これらの時間をデータベースの VenueHours テーブルに格納し、Venues テーブルとの FK と PK の関係に加えて、DayOfWeek、OpeningTime、および ClosingTime パラメーターを格納することにしました。
私のビューでは、ユーザーが知っている時間のみを入力できるようにしたいと考えています。つまり、会場が埋まらない日もあります。チェックボックスが属する DayOfWeek の OpeningTime フィールドと ClosingTime フィールドを有効にするためにユーザーがチェックできるチェックボックスを作成することを考えています。
私の質問は、この情報を HttpPost Controller Action に渡す方法に関するものです。
(7) で渡すことができる最大日数を知っているので、もちろん 7 つの null 許容の VenueHour パラメータをアクションに書き込むことができますが、もっと良い方法があると確信しています。
View 情報を Action に渡される List にバインドできますか? これは、ユーザーが入力できる情報の量に制限がないシナリオに遭遇した場合にも役立ちます.
asp.net-mvc - ASP.NET MVC: HtmlHelper.TextBox とカスタム モデル バインダーを使用した null 参照例外
を実装するクラスを作成しましたIModelBinder
(以下を参照)。このクラスは、それぞれが日付値の一部 (日、月、年) を表す 3 つの入力を持つフォームを処理します。HtmlHelper
また、フォームに 3 つのフィールドを出力するための対応する拡張メソッドも作成しました。
日、月、年の入力に解析可能な値が与えられたが、別の値が検証に失敗した場合、すべて問題ありません。フィールドが再入力され、期待どおりにページがユーザーに提供されます。
ただし、無効な値が指定さDateTime
れ、解析できないDateTime
場合は、ユーザーに返されるときにフィールドが再設定されるように任意の値を返します。
私は人々が抱えていた同様の問題について読みましたが、それらはすべて電話の欠如が原因のようSetModelValue()
でした. 私はこれを行っていませんでしたが、問題を追加しても解決されていません。
日付の Year プロパティのテキストボックスを作成しようとすると、null 参照例外がスローされますが、不思議なことに、Day または Month ではありません!
これがなぜなのか説明できる人はいますか?