問題タブ [model-binding]
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# - より複雑な (実際の) モデルバインディング?
私と一緒にロールして、次の例を想像してください。
これはそのようにもっとうまくやるべきです
以前に適切なモデルバインディングを試みましたが、適切に機能させることができませんでした。すべての例は、複数の複雑な型ではなく、1 つの非常に単純な型でどのように機能するかを示しています。モデルバインダーは、どのフィールドがどのタイプのものであるかをどのように知るのでしょうか? 果物 1 と果物 2 がある場合はどうなるでしょうか。バインダーは、IFruit インターフェイスに使用する具象型をどのように認識しますか? さらに、自分の Person に IEnumerable の果物を与えたい場合、どのように機能するのだろうか。
.net - jquery ajax呼び出しで動的テーブル行が更新されない
jquery ajax 呼び出しを介してデータを送信する際に、ややこしい問題が発生します。基本的に、 jquery を使用して管状グリッドに画面に動的に追加されたフォーム フィールドのフォーム値は、バッチ保存コマンドで更新されません。
基本的に、データベースに保存されている現在のすべての行を表示するグリッド リストがあり、各列にはフォーム フィールドが含まれています。次に、ページの上部に別の詳細を追加する典型的なフォームがあります。値を入力し、「追加」を押します。これは jquery json ajax 呼び出しを介してデータベースに保存され、フォーム データが追加され、リスト テーブルの新しい行に反映されます。(この部分は機能します)
私の問題は、新しく追加された jquery テーブルの行内でフォームの値を変更したい場合にあります。保存ボタンが押されると、すでに作成されたテーブル行のみが再保存されます。動的行フォーム データは保存されません。update 呼び出しは、jquery ajax と ASP.NET MVC モデル バインディングを使用します。「追加」で、asp.net mvcの「部分ビュー」をjquery ajax応答に返し、$("#tablename tr:last").after(result).
私がすでに推測したことは、前述のように、動的に追加された新しい行は更新されないということです。IList<Item>新しく作成された jquery の動的に追加されたフォーム フィールドの行を除いた、項目のリスト全体を含むコントローラー アクション メソッドへの MVC モデル バインディング リストで返されるセットがあります。これが問題であり、ページの更新を実行すると、行が最初の追加時に入力された元のフォームの値に戻る理由です。
私IList<Item>の にこれらの動的に追加された行が含まれない理由はありますか? Firebug で調べると、name 属性に同じ命名規則が使用されており、すべて問題ないはずです。
グラハム。
更新 1 5 月 11:00 GMT+10: モデル バインドを IList から FormCollection に変更すると、値が表示されます。モデル バインドではなく FormCollection を使用する必要はありませんが、FormCol を介して正しく取得できるかどうかという疑問が生じます。なぜ IList モデル バインダーを使用しないのでしょうか? 配列エントリを作業項目と比較しましたが、それらはすべて同じ基準と値に適合しています。
c# - ASP.NET MVC モデル バインディング
モデルバインディングに問題があります。CopyToModelStateDictionaryメソッドでプレフィックスを使用すると、無効なコントロールのスタイルまたは検証メッセージが表示されません。接頭辞を使用しない場合、スタイリングと検証のメッセージは表示されますが、動的に作成されたラジオ ボタンのリストからユーザーが選択を行っていない場合、ページがクラッシュします。どうすれば両方を取得できますか? ここで何が起こっているのかわかりません。
エラーメッセージ
スタックトレース:
私の質問を読んでくれてありがとう!
c# - 強く型付けされたビューからの複数のモデルフォーム送信でのモデルバインディング
複数のモデルが送信されているフォームのバインドに問題があります。苦情情報と1対多の苦情を含む苦情フォームがあります。フォームを送信しようとしていますが、バインドでエラーが発生します。ModelState.IsValidは常にfalseを返します。
ModelStateエラーをデバッグして表示すると、「EntityCollectionは既に初期化されています。InitializeRelatedCollectionメソッドは、オブジェクトグラフの逆シリアル化中に新しいEntityCollectionを初期化するためにのみ呼び出す必要があります」というメッセージが表示されます。
また、デバッグ時に、フォーム送信から苦情モデルに苦情が入力されていることがわかります。そのため、一部は機能しているようです。
デフォルトのModelBinderで自分が行っていることが不可能なのか、それとも単に正しい方法で行っていないのかはわかりません。これに関する具体的な例やドキュメントが見つからないようです。ここのstackoverflowでも非常によく似た問題が見つかりますが、強く型付けされたビューを処理していないようです。
コントローラーコード:
ビューコード(これは、ビューの作成/編集によって呼び出される部分的なビューであり、苦情で強く入力されます):
asp.net-mvc - カスタムモデルバインダーからオブジェクトを取得する必要がある場合、バインダーはサービスレイヤー、リポジトリレイヤー、または...と相互作用する必要がありますか?
これに似たクラスがある場合:
カスタムモデルバインダーを作成すると、フォームからの投稿はペットで送信されません。次のようなデータが送信されます。firstName: "myFirstName" lastName: "myLastName" myPet: "myPetsName"
実際のPetオブジェクトではなく、Petの名前が渡されるため、Petオブジェクトはモデルバインダー内から取得する必要があります。
私の質問は、モデルバインダーがサービスレイヤー、リポジトリレイヤーと相互作用する必要があるのか、それともペットを取得する必要があるのかということです。サービスレイヤーの問題は、サービスの初期化時にModelStateにアクセスできないように見えることです:((this.ModelState)でエラーが発生します)
Personオブジェクトを作成するためにモデルバインダーが必要な場合は、ペットを何らかの方法で割り当てる必要があります...これをどのように行うのですか?
jquery - Jquery Ajax でモデル バインディングを行う方法
モデル バインディングを使用して、コントローラーの見栄えを良くしたいと思います。モデル バインディングを使用すると、どれだけ優れているかがわかります。
対
モデル バインディングを行うときは、正しい名前のフォームを使用できます。Html.TextBox("")
jqueryはどうですか?$.post(url, data, callback, dataType)またはその$.ajax(options)呼び出しを行うときにCreate(Person personToCreate)、Person オブジェクトが適切に入力されるようにするにはどうすればよいですか?
sql-server - Ajaxからのモデルバインディングを簡素化するために、DBテーブルにnullフィールドを許可するのは悪い習慣ですか?
こことここを読んで、私の問題の概要を簡単に把握し、Ajaxからのモデルバインディングと言ったときの意味を正確に確認してください。
javascriptからのモデルバインディングを可能にするために外部キーフィールドをnull許容にするのは悪い考えですか?
たとえば、次のajax呼び出し中にPersonオブジェクトにバインドする必要があります...(PersonクラスはEntity Frameworkから作成されます)
Persondbに外部キーであるオブジェクトがあった場合、ajax呼び出しからの他のデータと一緒にオブジェクトPetを渡すことはできません。Petしたがって、PetがDBでnull許容でない限り、へのバインドは機能しPersonません。
だから私が知りたいのは...モデルバインディングを行うために、JavaScriptから渡すことができないdbフィールドをnullにする必要がありますか?または、ベストプラクティスに従うために、カスタムモデルバインダーを作成し、オブジェクトの「フラッター」バージョンにバインドする必要がありますか?オブジェクトのフラットバージョンの例:
私がこれを尋ねる理由は、Entity Frameworkで作成されたクラスの多くに外部キーが含まれているためです。つまり、これらのクラスのほぼすべてのフラットな複製を作成する必要があり、DRYプリンシパル全体に反するようです。
sql-server - 複雑な型が関係している場合、ajaxとモデルバインディングをどのように処理しますか?
私の視点からajax呼び出しを行うときは、モデルのバインドを維持したいと思います。私はjqueryajaxを使用して呼び出しを行っていますが、例として、これはajaxから呼び出したいコントローラーメソッドです。
ご覧のとおり、このメソッドはモデルバインディングに依存しています。これにより、メソッドが非常にクリーンになります...ただし、これは、ajaxが呼び出しを行うときに、DBでnull許容でないすべての変数を提供する必要があることを意味します。
Personしたがって、変数を持つというテーブルがある場合、次のようになります。
Personその場合、作成されるEntityFrameworkクラスは次のようになります。
(DBで指定されているように)どの変数もnullにできないため、これはajax呼び出しで、、、を指定する必要があることを意味string firstNameしstring lastNameますPet myPet。しかし、javascriptはペットを供給することができません...
したがって、私には2つのオプションしかありません(私が知っていること):
DBでmyPetをnullにできるようにする
ペットオブジェクトを必要としないPersonを表す「よりフラットな」クラスを作成します。
すなわち:
最初のオプションの問題は、DBを変更しなければならないのは奇妙に思えるということです...それは、あるべきではないことを許可しているので、間違いなくそれについて何か間違っています...
2番目のオプションの問題は、クラスがたくさんあり、これを回避するために、それぞれに重複するクラスを作成することは広範囲に及ぶように思われることです... 30のクラスがある場合、それは30の重複するクラスになります。モデルのバインドを可能にするために作成します。
誰かがより良いオプションを考えたり、あるオプションが他のオプションよりも優れている理由を説明したりできますか?
asp.net-mvc - MVCContrib グリッドとモデル バインダーによるポストバック
私の MVCContrib グリッドの内容は、強く型付けされたビューのモデルから取得されます。投稿が行われると、コントローラーに返されるときに、グリッドの内容はモデル オブジェクトにありません。これは、グリッドがセル内のテキストを含む単なるテーブルとしてレンダリングされるためであることがわかります。ポストが発生したときに、グリッドに送信したリスト データがポストに戻ってくるようにできることはありますか?