問題タブ [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 投票する
1 に答える
792 参照

asp.net-mvc - 命名規則を使用した ASP.NET MVC でのカスタム バインド

テキストフィールドで命名規則を使用して、コントローラーにポストバックされたコンテンツで何をすべきかを示すビューがあります。

形式は次のようになります。

<input type="text" name="RegistrationLine#ID" /> アップデート用

<input type="text" name="CreateRegistrationLine#LineNumber" />作成用

この命名規則を使用しているため、通常のモデル バインドはできません。しかし、私はこの件について少し読んでいて、これらのフォーム要素を解析してバインドし、オブジェクトを正しくインスタンス化するのに役立つカスタムモデルバインダーを作成できるという兆候を少し見つけました。

読んでください: formValue を別の名前のプロパティ、ASP.NET MVC にバインドする

これは私がやっていることと少し似ていますが、バインドしようとしているフォーム要素名に情報を追加するという追加の複雑さがあります。

私はここで基地から離れていますか?そうでない場合は、このモデルバインダーをオフにする方法を示すために、数行のコードをドロップしてください..

これが私が実際に達成しようとしていることに対する非常に悪いアプローチである場合は、より良いアプローチの提案を聞きたいです. 私ができるようにしたいのは、更新と作成の両方を一度にポストバックすることです。

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

asp.net-mvc - タイプまたは属性ではなく、コントローラーごとにモデルバインダーを変更しますか?

モデル バインダーを Controller ごと、または ActionMethod ごとに交換できるようにしたいと考えています。

私の知る限り、フレームワークでサポートされている唯一のオプションは、モデル バインダーを特定の型にバインドすることです。

コントローラーごとまたは ActionMethod ごとにモデル バインダーをクリーンな方法で変更するにはどうすればよいですか?

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

c# - これはASP.NETモデルバインディングのバグですか?

ASP.NETMVCに単純なフォームがあります。これらの結果をコントローラーアクションに投稿しようとしていますが、奇妙な動作をしています。

view単純なHTMLテーブルです。

ビューの画像

HTMLフォームビューの一部は次のとおりです。

バインディングオブジェクト:

コントローラアクションコード:

テスト後、これが私の観察です:

  1. 各質問で少なくとも1つをCheckBox選択している場合、これは正常に機能し、コントローラーupdater.questions.Length == 5でデータが完全にバインドされます。

  2. 質問の1つにまったく答えないと、スキップした数と同じ大きさの配列しか得られません-1。したがって、質問3に答えなかった場合、コントローラーアクション2で配列を取得します。

  3. #2のロジックを使用することで、最初の質問に答えない場合は、次のようになりますnullupdater.questions

私が得たいもの(そして私が期待したもの)はそれです:

私は常にquestions長さを取得し、5質問の1つに答えなかった場合は、0そのインデックスのサイズの配列を取得するだけでしたresponseIds

これはASP.NETMVCモデルバインディングのバグですか?そうでない場合、私が見逃しているもの、または私が探している望ましい動作を取得する方法はありますか?

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

asp.net-mvc - リストボックスからのnull値は、ASP.NET-MVCのモデルバインディングでは評価されません

少なくとも1つを選択しない場合、モデル検証はリストボックス値にリンクされた属性を評価しません。この方法では、必要な値を通知するためにDataAnnotationsを使用してモデル評価を行うことはできません。

コントローラー:

景色:

モデル:

どんな助けでも大歓迎です。ありがとうございました。

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

asp.net-mvc - ASP.NET MVC で ViewModel をハイドレートする

多くのユーザー コントロールで構成されたページがあります。このページのビュー モデルはかなり複雑です。

このページには、フィルタリング、ソートなどの情報を含む PostModel もあります。

単純な PostModel が検証された後、コントローラーは 3 つ以上のリポジトリを開き、それぞれに複数の呼び出しを行い、ビュー モデルを構築します。控えめに言っても、私のコントローラー アクションはかなり大きくなりました。

これは私が取り組んできた中で最も複雑なページであり、よりシンプルにする方法を決めるのに苦労しています.

私が最初に考えたのは、バインディングの検証後にリポジトリを呼び出して ViewModel を返すビュー モデル ファクトリを作成することでした。

次に、PostModel を検証し、ViewModel を 1 ステップでハイドレートするカスタム モデル バインダーを作成することを考えました。

私の質問は、複雑なビュー モデルをどのようにハイドレートするかということです。

これを書いているうちに、Html.RenderAction を使用して、ページという野獣を構成する各ユーザー コントロールのモデルを作成するというアイデアが浮かびました。

アップデート:

リポジトリは WCF サービスを呼び出し、アプリケーションはより大きな SOA アーキテクチャの一部です。

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

asp.net-mvc - ASP.Net MVC : JSON をコントローラーに送信する

ASP.Net MVC でコントローラーに投稿するときに、標準の QueryStrings ではなく JSON を送信できるようにしたいと考えています。フロントエンドの機能が正常に動作しています (JSON オブジェクトを構築してから送信します)。

問題は、MVC フレームワークに同梱されているデフォルトの ModelBinders がこれをサポートしていないコントローラー側にあります。

これを回避する方法の組み合わせを見てきました。そのうちの 1 つは、オブジェクトをパラメーターとして受け取り、JSON ライブラリを使用してそれを逆シリアル化し、それをアクション パラメーターに追加するフィルターを適用することです。これは理想的ではありません。

もう 1 つの優れた方法は、カスタム モデル バインダーを使用することです。私が見たものはすべて、モデルが 1 つしかなく、それが変数ではなくクラスであると想定しています。複数あると壊れます。

他の誰かがこれに遭遇しましたか?私が持っていたアイデアの 1 つは、MVC が FormCollection を処理する方法をオーバーライドしてそこでインターセプトし、値を自分でコレクションに追加して、MVC が通常の方法で残りを実行できることを期待することでした。それが可能かどうか誰にもわかりますか?

重要な問題は、私のビューモデルは以前と変わらないため、私の問題はバインドにあるのではないということです。問題は、JSON Post から値を取得することです。

私が正しければ、MVC は QueryString から値を取得し、それをフォーム コレクションに入れ、それを ModelBinding に使用します。FormCollection の割り当て方法を変更するのが正しい方法ではないでしょうか。

アクションの例:

通常のバインドは機能しますが、JSON は機能しません。モデル バインダーのすべての例も機能しません。これまでの私の最善の解決策は、オブジェクトを辞書に変換し、各パラメーターをループして一致させることです。理想的ではないようです。

0 投票する
4 に答える
26512 参照

c# - プロパティのカスタムモデルバインダー

次のコントローラーアクションがあります。

MyModelこのように見える場所:

したがって、DefaultModelBinderはこれを問題なくバインドする必要があります。唯一のことは、バインディングに特別な/カスタムバインダーを使用したいということですPropertyB。また、このバインダーを再利用したいと思います。したがって、解決策は、もちろん機能しないPropertyBの前にModelBinder属性を配置することだと思いました(ModelBinder属性はプロパティでは許可されていません)。私は2つの解決策を見ます:

  1. モデル全体ではなく、すべてのプロパティでアクションパラメータを使用するには(モデルには多くのプロパティがあるため、これは好ましくありません)、次のようになります。

    /li>
  2. 新しいタイプを作成するにMyCustomType: List<int>は、このタイプのモデルバインダーを登録します(これはオプションです)

  3. たぶん、MyModelのバインダーを作成し、オーバーライドBindPropertyして、プロパティが"PropertyB"カスタムバインダーでプロパティをバインドしている場合。これは可能ですか?

他に解決策はありますか?

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

c# - MVC2 IModelBinder とオブジェクトへの文字列の解析 - どうすればよいですか?

Timeというオブジェクトがあります

したがって、編集アクションまたは作成アクションでの自動モデル バインディングで、文字列からこの Time インスタンスを設定する (つまり、Parse メソッドに文字列をフィードして結果を返す) ことが必要です。

私がこれを行っている理由は、選択可能な時間を持つ DropDownList があるためです。各オプションの値は、パーサーで読み取り可能な文字列になります。

IModelBinder インターフェイスから BindModel メソッドの例を提供できる人はいますか?

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

asp.net-mvc - 複数のキーによるリポジトリからのオブジェクトのモデル バインディング

次のルートを想定します。

これらの 2 つのパラメーターregionstorehouse全体で、単一のエンティティー a を識別しますStorehouse。したがって、いくつかの倉庫のコンテキストで一連のコントローラーが呼び出されています。そして、次のようなアクションを書きたいと思います:

ここであなたの考えを読むことができます:「カスタムモデルバインダーを書いてください、男」。そうです。ただし、質問は

カスタム モデル バインダー内で魔法の文字列を回避するにはどうすればよいですか?
これが私の現在のコードです:

単一のキーがあれば、bindingContext.ModelName使用できます...
おそらく、すべてのアクションにオブジェクトを提供する別の方法がありStorehouseます。つまり、コントローラーのプロパティとして宣言し、Controller.Initialize.

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

asp.net-mvc - 新しい「For」HTML ヘルパーを使用すると、ViewModel アプローチが MVC 2 の ModelBinding に干渉する

私は .net MVC 2.0 を使用しており、カスタム ViewModel オブジェクトを受け取る編集ビューをセットアップしました。ViewModel は、次の 2 つのプロパティを持つクラスです。

私の見解では、ポートフォリオ オブジェクトを更新するためのフォームがあります。SelectList が渡されるので、ポートフォリオに関連するセクターのドロップダウン リストを作成できます。ここでは特別なことは何もありません。1.0 で行ったのとまったく同じです。

新しい TextBoxFor および DropDownListFor ヘルパー メソッドを使用すると、問題が発生します。

私は次のように設定しています:

これらは、次の HTML 出力を (それぞれ) 生成しています。

name および id 属性には「Portfolio」プレフィックスが付いていることに注意してください。これは、「model.Portfolio.X」から派生しているためだと思います。これは、Edit ActionResult の Controller で Model Binding を適用する機能を妨げているようです。

ActionResult は次のとおりです。

(a) "Portfolio" プレフィックスがビューに適用されないようにするか、(b) ModelBinding を存在させて動作させるにはどうすればよいですか。

ありがとう、

マイク