問題タブ [defaultmodelbinder]
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.
c# - ASP.NET MVC の既定のバインダー: int が長すぎる、空の検証エラー メッセージ
次のモデル クラスがあります (簡単にするために省略しています)。
このモデルを使用する Razor フォームは次のとおりです。
テキスト ボックスに数値以外のデータを入力すると、正しい検証メッセージが表示されます。つまり、「値 'qqqqq' はフィールド 'IntData' に対して有効ではありません」。
しかし、非常に長い一連の数字 (345234775637544 など) を入力すると、EMPTY 検証サマリーが表示されます。
私のコントローラー コードでは、これModelState.IsValid
はfalse
予想どおりでありModelState["IntData"].Errors[0]
、次のようになっています。
ご覧のとおり、検証は正常に機能しますが、ユーザーにエラー メッセージは表示されません。
この場合、適切なエラー メッセージが表示されるように、既定のモデル バインダーの動作を微調整できますか? または、カスタム バインダーを作成する必要がありますか?
asp.net-mvc-3 - オブジェクトをバインドする MS MVC3 モデル
DefaultModelBinder と、それがオブジェクト型のプロパティを持つモデルのバインドをどのように処理するかをよりよく理解するのを手伝ってくれる人はいますか?
コードをダウンロードしてトレースしてみましたが、まだ少し頭を悩ませています。
次のようなモデルがあるとします。
そして、私のフォームがすべて正しく生成されたと仮定します (例: name="MyModel.MyProperty")
MyProperty が実際に特定の型のインスタンスに設定されているさまざまなケースではどうなりますか?
私の場合、DefaultModelBinder からカスタム バインダーを派生させ、CreateModel() をオーバーライドして、MyProperty が正しい Type に設定された MyModel を返します。
MyProperty を文字列に設定すると、何らかの理由で DefaultModelBinder::BindProperty() が単なる文字列ではなく、フォーム フィールドの内容を含むサイズ 1 の string[] を返すことに気付きました。なんで?
MyProperty がより複雑なタイプの場合、フォーム フィールドがすべて適切に命名されていても (例: name="MyModel.MyProperty.FirstName")、バインドがまったく機能していないようです。
このような複雑な/抽象的なモデル バインディング シナリオを扱った人はいますか? より良い方法はありますか?(私はそれが奇妙であることを知っていますが、実行時まで実際にどの Type であるかを知ることができないため、MyModel の MyProperty をオブジェクトにする必要があります)
asp.net-mvc - コレクションへの MVC3 ModelBinding でインデックス ギャップが返される
EditFor 関数を使用してビューでレンダリングしているモデルにオブジェクトのコレクションがあり、各オブジェクトを実際にレンダリングするための EditorTemplate があります。
これはしばらくうまく機能しており、html を確認すると、テキスト ボックスにはモデル プロパティのプレフィックスが付けられ、その後に元のコレクションのインデックスが続きます。
ただし、最近、コレクションのモデル メタデータで ShowForEdit および ShowForDisplay プロパティを使用し始めました。ShowForEdit が true でない場合は、エディター テンプレートの最初の行でスキップします。
しかし、これらはすべて html でインデックス化されているため、このコレクションをポストバック経由でビューモデルに保存しようとすると、インデックス番号に依存するために失敗します。欠落しているインデックスの後のコレクション内のすべてのアイテムは、値を確認すると、ビュー モデルから欠落しています。
この場合、編集ビューに表示したくないのでスキップするのは、実際にはコレクション内の最初の項目ですが、このため、html の最初のインデックスをポストバックすると 1 (0 ではなく) になります。通常のように)、変更を保存しようとすると、これが問題になります。これは、javascript を使用して DOM を変更する場合にも問題になります。
HTML で表現されたコレクションに 1 つ以上のインデックスが存在しない場合に、デフォルトのモデル バインダーがポストバックされたデータを読み取る機能で問題が発生した人はいますか?
この問題を処理するモデル バインダーはありますか?
asp.net-mvc - (Try)UpdateModel の使用方法
(Try)UpdateModel を使用する正しい方法は何ですか?
これを実行すると:
TryUpdateModel
true を返し、ViewData
エラーがなく、- しかし、私
Proxy
は更新されていません。
アクション方法
投稿データ
モノのクラス
EDIT:フォームコレクションを明示的に渡そうとしました
TryUpdateModel(Proxy, TypeName, idontknow)
編集#2:(NickLarsenへの返信)
- VSとサーバーを再起動しましたが、変化はありません。
- 値は実際には FormCollection にあります。
- モックデータが動く!ここで何かを台無しにしているに違いないことはわかっています。
- デバッガーを使用して値を確認します。
c# - 派生抽象クラス asp.net mvc の JSON カスタム バインダー null
抽象クラス用のカスタム バインダーを作成しました。バインダーは、使用する実装を決定します。うまくいきますが、抽象クラスに存在しないプロパティを子クラスに追加すると、常にnullになります。
以下は、抽象クラスPet
と派生クラスDog
およびのコードですCat
。
コントローラーは単にPet
パラメーターを受け取り、それを JSON として返します。
私が送れば
私は戻ってきます
にはCat
、抽象クラスには存在しないパラサイト プロパティがありますPet
。私が送れば
私は戻ってきます
他のより複雑なクラスでこれを試しましたが、これは単なる例です。デバッガーを調べたところ、parasite
値は値プロバイダーにあり、バインダーが返すモデルにはパラサイトのフィールドが含まれています。誰でも問題がどこにあるかを見ることができますか?
asp.net-mvc - MVC3 非順次隠し入力インデックスは最初に来る必要がありますか?
モデル バインディング用の MVC3 非シーケンシャル インデックス非表示入力。
投稿される他の関連する入力の前、後、または途中にある場合は問題になりますか?
投稿されたデータの最終的な場所は重要ですか?
たとえば、それらをすべてひとまとめにして機能することはありますか?
asp.net-mvc-2 - モデル プロパティを DefaultModelBinder にバインドする方法 - ASP.NET MVC2
次のシナリオがあります。
- Edit/Employee ビューに Entity Framework エンティティ (Employee) からのモデルが取り込まれています
- Edit/Employee から Save/Employee コントローラ アクションに投稿します。Save/Employee アクションは、プロパティとして Employee を持つ別のタイプ (EmployeeSave) を想定しています。
これは Edit/Employee メソッドです
これは、Save/Employee メソッドです。
これは EmployeeSave クラスです
MVC DefaultModelBinder は、Employee クラスと EmployeeSave クラスの両方を解決できます。
c# - DefaultModelBinder は、JSON オブジェクトとしてアクションに渡された .NET Dictionary オブジェクトを逆シリアル化できませんか?
私は非常に単純なクラスを持っています:
クライアントのディクショナリにデータを入力し、JSON オブジェクトとしてコントローラー アクションに渡したいと考えています。ただし、クライアントで何を試しても、DefaultModelBinder は逆シリアル化できないようです。
私のアクションを呼び出すための JavaScript コードの例を次に示します。
そして、これが私のアクションメソッドの簡略化されたバージョンです:
反対の働きをすることに注意してください。JsonResult として渡されると、FilterItem オブジェクトは正常にシリアル化され、JSON オブジェクトとしてクライアントに渡されます。しかし、逆に行こうとしてもうまくいきません。
Connect のチケットを読んで、回避策が機能するだろうと考えましたが、機能しません。
ASP.NET MVC 3 で DefaultModelBinder を使用して .NET ディクショナリを逆シリアル化することはまったく可能ですか?
asp.net-mvc-2 - DefaultModelBinder 実装がモデルにデータを入力しない - ASP.NET MVC 2
DefaultModelBinder の非常に単純な実装があり、カスタム検証を実行する必要があります。
MyViewModel はパブリック シール クラスです。モデル バインダーは、次のように Global.asax に登録されます。
問題は、モデルが読み込まれないことです! しかし、MVC の既定のモデル バインダー (global.asax の登録を削除します) は正常に動作します。
これはビュー HTML です。
すべてのフィールドは、モデルのプロパティと一致します。
jquery - jQueryを使用してintのリストをASP.netMVCデフォルトモデルバインダーに送信する方法
このようにjQueryでintのリストを送信すると:
次に、jQueryはpkListオブジェクトを変換し、次のように投稿で送信します。
サーバーがPHPの場合は問題ありませんが、Asp.NET MVC3を使用して、デフォルトのモデルバインダーを使用してこれらの値を取得しようとしています。
ただし、pkListは常にnullであり、デフォルトのモデルバインダーはそれをバインドできないようです。
これを正しく解決するにはどうすればよいですか?
追加された ソリューション
traditional
私は、jQueryでオプションを設定してDarinDimitrovのソリューションを使用しました。
これで、jQueryは[]
パラメータにを追加しなくなり、次のように送信されます。
また、MVCのデフォルトモデルバインダーは値を正しく取得します。
これが誰かを助けることを願っています。