問題タブ [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.

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

asp.net-mvc-2 - ASP.NetMVC2-ModelBindingと辞書

私のインターフェイスには、次のようなテキストボックスのリストがあります: http ://screencast.com/t/YjIxNjUyNmU

各テキストボックスはテンプレートに関連付けられているため、テキストボックスの数は不明です。私のページでは、これらのテンプレートのいくつかに番号を関連付けることが目標です。

以下にサンプルのHTMLコードを示します。

私のコントローラーで期待しているのは、最初のintがテンプレートIDで、もう1つがユーザーによって指定されたカウントであるIDictionaryを取得することです。

これが私が欲しいものです:

私はたくさんのことを試しましたが、何もうまくいきませんでした。ソースを読み込もうとしましたが、迷路であり、モデルのバインドに関する情報を取得しようとすると頭が痛くなります。

質問:

  • モデルバインディングがどのように機能するかについての優れたリソースはありますか?徹底的に説明したいのですが、特定の例について説明している84093043のブログにうんざりしています。
  • IDictionary(またはコントローラーのアクションでIDictionary)を取得するために使用してHTMLを作成するにはどうすればよいですか?

あなたの助けをどうもありがとう

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

asp.net-mvc - MVC での SelectList へのバインド

もう一度、「こんなはずじゃない?*!#難しい」状況に直面しました。

問題: MVC でフォームを使用してオブジェクトを作成したいと考えています。オブジェクトの要素の 1 つは、限られた選択肢のセットです。これは、ドロップダウン リストの完全な候補です。

しかし、モデルで SelectList を使用し、ビューでドロップダウン リストを使用してから、モデルを Create メソッドに戻そうとすると、「Missing Method Exception: No Parameterless constructor for this object」というエラーが表示されます。MVC ソース コードを調べると、モデルにバインドするには、Binder が最初にモデルを作成できる必要があり、デフォルトのコンストラクターがないため、SelectList を作成できないようです。

簡略化したコードは次のとおりです。 モデルの場合:

コントローラーの場合:

ビューの場合:

これで、10 ヤード戻ってパントすることで、これを機能させることができることがわかりました。モデル バインディングをバイパスして FormCollection に戻り、自分ですべてのフィールドを検証してバインドしますが、もっと簡単な方法が必要です。つまり、これは非常に単純な要件です。MVC ModelBinding アーキテクチャ内でこれを機能させる方法はありますか? もしそうなら、それは何ですか?そうでない場合は、どうしてですか?

編集:まあ、私は顔に卵がありますが、これは他の誰かを助けるかもしれません. さらに実験を行ったところ、うまくいくと思われる簡単な解決策が見つかりました。

単純な値 (選択リストの値のタイプに応じて文字列または整数) を指定し、バインド先のモデル要素として名前を付けます。次に、選択肢の選択リストとして 2 番目の要素を指定し、別の名前を付けます。したがって、私のモデルは次のようになりました。

そして、ビューの DropDownListFor ステートメントは次のようになります。

これを行うと、フォームで行われた選択が送信ボタンによって文字列 Choice に正しくバインドされ、モデルが 2 番目の Create メソッドに送信されます。

0 投票する
5 に答える
7749 参照

c# - 送信後にMVC2 TextBoxFor値が更新されませんか?

これは非常に奇妙な動作です。何が起こっているのかを理解するために、いくつかのデモ コードをセットアップしました。

基本的に、2 つのアクションと 1 つのビューがあります。最初のアクションは空のモデルをビューに送信し、セクション アクションはモデルを受け取り、その内容を変更して同じビューに送り返します。

ビューでは、モデルには更新された値が含まれているように見えますが、 Html.TextBoxFor(x => x.PropertyNameHere) を実行すると、変更されていない値を含むテキストボックスがレンダリングされます。

笑...トイレのユーモアを前もってお詫びしますが、1日が退屈になりすぎないようにします。;)

ここで何が起こっているのか誰にも分かりませんか?TextBoxFor の出力で古い値が value 属性に入れられるのはなぜですか?

複製するコードは次のとおりです。

/Views/Demo/Index.aspx

DemoModel.cs

DemoController.cs

そして、ここに奇妙な出力があります:

奇妙な

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

asp.net-mvc-2 - モデルバインディングと派生モデルクラス

ASP.NET MVCは、他のモデルクラスを継承するモデルクラスがある場合に、モデルバインディングを機能させる簡単な方法を提供しますか?

私のシナリオでは、に強く型付けされたビューがありますList<Person>

Person、つまりPersonTypeOneとを継承するクラスがいくつかありますPersonTypeTwo

これらのクラス名と一致する名前を持つ(そしてそれぞれのモデルのプロパティのフォーム要素をレンダリングする)3つの強く型付けされた部分ビューがあります。

これは、メインビューで次のコードを使用できることを意味します。

これは、ユーザーがフォームを送信する場合を除いて、関連するコントローラーアクションメソッドが、、およびのリストではなく、を取得する場合を除いて、うまく機能しList<Person>ます。PersonPersonTypeOnePersonTypeTwo

PersonTypeOneフォームの送信には、デフォルトのモデルバインダーにおよびPersonTypeTwoクラスのインスタンスを作成するように指示するのに十分な情報が含まれていないため、これはほぼ予想どおりです。

それで、デフォルトのモデルバインダーからそのような機能を取得する方法はありますか?

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

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にアクションパラメーターを追加してから、値をモデル定義に手動でコピーする必要がありますか?

0 投票する
0 に答える
441 参照

c# - ASP.net MVC Linq-to-SQL 多対多フィールド バインディング

重複の可能性:
LINQ to SQL を使用して ASP.NET MVC で多対多の関係をモデル化する

やあ、

この質問の短いバージョンは、「部分クラスで設定された多対多フィールドを持つオブジェクトのデータベース挿入を適切に処理する方法はありますか?」です。以前に質問されていたらすみません。


テーブルを含む典型的な MVC セットアップがあるとします。

  • 投稿 {PostID, ...}
  • カテゴリ {CategoryID, ...}

投稿には複数のカテゴリを含めることができ、カテゴリは複数の投稿を識別することができます。したがって、さらに追加のテーブルが必要だとします。

  • PostCategories {PostID, CategoryID, ...}

これにより、投稿とカテゴリの間の多対多の関係が処理されます。私の知る限り、Linq-to-SQL でこれを行う方法は今のところないので、部分的な Post クラスをプロジェクトに追加してその機能を追加する必要があります。何かのようなもの:

これで、「Categories」UI アイテムを自動的に入力する「Create」ビューを作成できるようになりました。他のフィールドと同じように扱えます - 楽しいです!

ここからトラブルが始まります。

では、私の質問は次のとおり
です。制御する多対多の関係を持つオブジェクトに対して、自動オブジェクト モデル バインディングを正常に機能させるにはどうすればよいでしょうか。多対多の関係を可能にする回避策は、検証と挿入のために Post オブジェクトが送信された後にのみ発行される CategoryID に関連付けるために PostID を持つ Post オブジェクトに依存します。

ここでCatch22のビット。提供できる用語、リンク、またはヒントは、非常に役立ちます。

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

asp.net-mvc-2 - Asp.Net MVC 2:ビューモデルは、ポストバック時にモデルにどのようにバインドされますか?

長々と申し訳ありませんが、写真は 1000 語に匹敵します。

ASP.NET MVC 2 では、入力フォーム フィールドの "name" 属性には、ポストバック時にオブジェクトをバインドするために、C# でオブジェクトを参照するために使用する以下の構文が正確に含まれている必要があります。つまり、複数の OrderLines を持つ複数の Orders を含む次のようなオブジェクトがある場合、名前は次のように表示され、適切に機能します (大文字と小文字が区別されます)。

これは機能します:

ただし、クライアント ブラウザで注文明細を追加したり、注文明細を削除したりしたいと考えています。 どうやら、インデックスはゼロから始まり、N までの連続するすべてのインデックス番号を含む必要があります。

黒帯の忍者である Phil Haack のブログ エントリ(こちら)では、[0] インデックスを削除する方法、重複する名前を使用する方法、および [0] 表記を使用して重複する名前を MVC に自動列挙させる方法について説明しています。ただし、ネストされたオブジェクトを使用してこれをバインドし直すことができませんでした:

これは失敗します:

投稿時にネストされたViewModelをバインドするためにこれがどのように機能するかを説明するアドバイスはまだ見つけていません。 IList でネストされたバインドを行うために必要な正確な名前の既存のコード例または厳密な例へのリンクはありますか?

スティーブ・サンダーソンは、この種のことを行うコードをここに持っていますが、これをネストされたオブジェクトにバインドすることはできないようです。[0]..[n] AND が番号付けで連続していないものは、単純に戻りオブジェクトから削除されます。

何か案は?

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

c# - インターフェイスへの MVC モデルのバインディング

次のようなOrderFormViewModelを作成しました

これは作成ビューに移動し、そこで各セクション (配送の詳細、支払いの詳細など) が必要なフィールドをキャプチャする部分ビューに渡されます。

実行するまでは、これはすべて非常にきちんとしたものだと思っていましたが、もちろん、MVC モデル バインダーはインターフェイスのインスタンスを作成する方法を知らないことに気付きました。

これを何とか解決する方法はありますか?

また、Unity コンテナーを使用して DI を学習しようとしているため、UI プロジェクト (モデルは別のプロジェクトにあります) で具象クラスへの参照を避けるようにしています。

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

asp.net-mvc - 非シーケンシャル インデックスを使用したリストへのモデル バインド。後でインデックスにアクセスできますか?

リストへのモデルバインディングに関するフィルの素晴らしいチュートリアルに従っています。

次のような入力名を使用します。

これはうまく機能し、データは問題なくモデルに返され、書籍のリストが生成されます。

私が探しているのは、本を送信するために使用されたインデックスにモデルでアクセスする方法です。その番号「5804」を取得したいのですが。これは、索引がセマンティックに重要であるためです。アクセスできれば、オブジェクト (ブック ID) に別のプロパティを設定する必要がなくなります。

FormCollection または UpdateModel が呼び出された後のモデルのいずれかで、インデックスが送信されたときのインデックスを確認する方法はありますか?

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

asp.net-mvc-2 - ASP.NET MVC で入れ子になったモデルを処理する方法

ネストされた属性を持つモデル バインディングを正しく処理する方法について、うまく機能するソリューションを探しています。以下のような他の子モデルのリストを持つモデルが 1 つあります。

コントローラーで、次のようにデータを更新しようとします。

ただし、TryUpdateModel は常に false を返し、検証メッセージは UI に表示されません。UI は、標準の MVC ヘルパー EditorFor を使用して構築されます。

これを行うベストプラクティスは何ですか? ごく普通のシナリオでは、それほど簡単に情報を見つけることはできません。

ありがとう!