問題タブ [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.
asp.net-mvc - モデル バインディングと表示のトリミングされた文字列プロパティ
私の強く型付けされたビューは、Linq to SQL で作成された "Person" オブジェクトから継承しています。私の「編集」ビューでは、もちろん古い値を表示する必要があります:
「FirstName」は NCHAR であるため、トリミングする必要があります。だから私は次のようになりました:
これは機能します。しかし、フォームが(POST後に)送信され、いくつかのエラーが発生すると、もう一度表示する必要があります:
何らかの理由でユーザーがテキストボックス "FirstName"を空白のままにした場合、結果のプロパティ Person.FirstName はnullになり、Model.FirstName.Trim() は例外 (オブジェクト参照がオブジェクトのインスタンスに設定されていません) をスローします。
バインドを変更し、すべての文字列をデフォルトでトリミングする方法はありますか? または、これを修正する方法についてのアイデアはありますか?
更新: MVC 2 の動作であることが確認されているようです..これを処理する良い方法をまだ探しています。実際に拡張メソッドを使用する:
asp.net-mvc-2 - 抽象クラスを使用したAsp.Net MVC 2 DefaultModelBinderエラー
抽象クラスを使用する単純な Poco-Model がありますが、Asp.net MVC 2 のデフォルトの ModelBinder では機能しないようです。1 つのアイテムには、コレクション内に複数のオブジェクトがあり、すべて同じ抽象基本クラスを使用しています。
モデル:
実例:
Objects コレクション内の 1 つの TextObject を使用して、そのアイテムに Default Html.EditorForModel() ヘルパーを使用すると、次のような html 入力フィールドが得られます。
コントローラーにポストバックすると、デフォルトの ModelBinder から「抽象クラスを作成できません」というエラー メッセージが表示されます。明らかに、バインダーはその抽象基本クラスをインスタンス化しようとします。しかし、コレクションには継承された TextObject タイプのオブジェクトしかないため、その理由はわかりません。カスタム Modelbinder を作成せずにこれを機能させる方法はありますか?
asp.net-mvc-2 - 派生オブジェクトのリスト用のMVC2Modelbinder
Asp.net MVC 2の既定のModelbinderで動作するさまざまな(派生した)オブジェクトタイプのリストが必要です。
私は次のViewModelを持っています:
また、リストには、さまざまな派生型のオブジェクトが含まれています。
List実装とArrayList実装のどちらを使用するかは関係ありません。すべてがフォームで適切にスキャフォールディングされますが、Modelbinderは、ActionResultにポストバックするときに、派生オブジェクトタイプのプロパティを解決しません。
処理されるさまざまなオブジェクトタイプのリストを取得するためのViewmodel構造の良い解決策は何でしょうか?すべてのオブジェクトタイプ(リスト、リストなど)に追加のリストを用意することは、ビューモデルの構築とドメインモデルへのマッピングの両方で多くのオーバーヘッドが発生するため、私にとっては良い解決策ではないようです。
カスタムモデルバインダーですべてのプロパティをバインドする他のアプローチについて考えると、ここでデータ注釈アプローチ(必要な属性の検証など)を多くのオーバーヘッドなしで使用するにはどうすればよいですか?
asp.net-mvc-2 - ネストされたモデルに DefaultModelBinder を使用する際にヘルプが必要です
関連する質問がいくつかありますが、うまくいく答えが見つかりません。
次のモデルがあると仮定します。
そして、次のことを行う拡張ビューViewPage<EditorViewModel>
:
そして私のコントローラーは次のようになります:
DefaultModelBinder を取得して EditorViewModel を適切にバインドするにはどうすればよいですか? 特別なことを何もせずに、すべてが null またはデフォルトの EditorViewModel の空のインスタンスを取得します。
私が最も近いのは、UpdateModel
手動で呼び出すことです:
これにより Account プロパティ モデルが正常に更新されますが、account
(EditorViewModel の残りのパブリック プロパティを取得するために) UpdateModel を呼び出すと、まったく役に立たない「タイプのモデル ... を更新できませんでした」というメッセージが表示されます。内部例外がないため、何が問題なのかわかりません。
これをどうすればいいですか?
c# - モデル バインディングのカスタム タイプ
System.Nullable タイプのように機能する構造体があります。
ASP.NET MVC バインディングで使用しようとしています。デフォルトの顧客モデル バインダーを使用すると、プロパティは常に null になります。すべてのフォーム入力名の末尾に「.Value」を追加することでこれを修正できますが、ある種のカスタム モデル バインダーを使用して直接新しい型にバインドしたいだけですが、私が試したすべてのソリューションは不必要に複雑に見えました. デフォルトのバインダーを拡張し、数行のコードで、暗黙的な変換を使用してプロパティ バインディングをモデル全体にリダイレクトできるはずだと思います。デフォルト バインダーのバインディング パラダイムはよくわかりませんが、モデルとモデル プロパティのこの区別に固執しているようです。これを行う最も簡単な方法は何ですか? ありがとう!
c# - DefaultModelBinder のテスト時の NullReferenceException
BDD/TDD 手法を使用してプロジェクトを開発しており、コースを維持するために最善を尽くしています。私が遭遇した問題は、DefaultModelBinder の単体テストです。mspec を使用してテストを記述しています。
バインドしたい次のようなクラスがあります。
これが、仕様コンテキストを構築する方法です。私は偽のフォーム コレクションを構築し、それを bindingContext オブジェクトに詰め込んでいます。
最後に、仕様の 1 つから .BindModel() を実行すると、仕様が null 参照例外をスローします。
それが何であるかの手がかりはありますか?
必要に応じて、お気軽にお問い合わせください。私は何かを当然のことと思っていたかもしれません。
asp.net-mvc - DefaultModelBinder によって返されたモデルを単体テストする必要がありますか?
DefaultModelBinder によって返されたモデルの単体テストで問題が発生しています。偽のフォーム コレクションをフィードし、それが返すモデルをチェックして、モデル プロパティが適切にバインドされていることを確認したいと考えています。私の調査では、DefaultModelBinder のテストに関するリソースはまったく見つかりませんでした。多分私は何かが足りない。たぶん、MVC のこの部分をテストするべきではないでしょうか? あなたの考え?
asp.net-mvc - asp.net mvc モデル バインダーは、投稿された配列を適切な順序で保持しますか?
だから私はリスト(整数の)パラメータを持つasp.net mvcアクションに投稿している数字の配列を持っていて、それはすべてうまくいきます。
私の質問はこれです:
リスト(整数の)には、私が投稿した配列と同じ順序で数字が含まれると想定しても安全ですか?
御時間ありがとうございます!
編集:
投稿されるデータは次のようになります。
POSTDATA=model.LevelIds=6&model.LevelIds=19&model.LevelIds=16&model.LevelIds=21&model.LevelIds=18
改ざんデータ Firefox アドオンを使用して確認しています。
従来のモードでjQueryを使用しています。
編集:
アクションは次のようになります。
thecreatviewmodel にはたくさんのプロパティがありますが、興味深いのは...
クライアント側では、ビュー モデルは javascript/jquery で構築されます。
その関数は、この JavaScript のビットから呼び出され、基本的にリスト内のすべてのものをドロップダウン リスト (選択コントロール) に追加し、それらすべてを選択します。
このように説明するとかなり複雑に見えますが、実際にはかなり単純です。これはすべて、フォームの一部である 2 つの接続されたドラッグ アンド ドロップ リストの一部です。
したがって、変数ですべてのオプションが選択された選択リストの値を入力し、それを (整数の) ilist に投稿すると、選択したときと同じ順序で ilist に表示されます。彼らのようです。しかし、それは単なる偶然ですか?
asp.net - ASP.NET MVC モデル バインダーがディクショナリで動作しない
を使用した次のビュー モデルとアクションをDefaultModelBinder
指定すると、ディクショナリは無視されるように見えますが、他のすべてのプロパティは正しくバインドされます。ここで何か不足していますか?MVC ソース コードを見ると、これは正当なようです。
ありがとう
参考までに、HTML 出力は次のとおりです。
編集:上記は以下に指摘されているように機能しませんが、私はこのレイアウトを好み、次のクイックハックが私のニーズに合っています。投稿した直後にこれを呼び出してください...
もちろん、片付けが必要です:)