問題タブ [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.
asp.net-mvc - asp.net mvc Beta1 の ModelBinding
Web アプリケーションをプレビュー 3 からベータ 1 に変換し、フレームワークの新しい機能を使用できるようにしようとしています。それらの 1 つが ModelBinding です。
この特定の状況のために、(今のところ) 一連の単純型プロパティの単なるコンテナーであるクラスを作成しました。多数のテキスト ボックスを含むフォームを作成する場合、フレームワークでこれらのフィールドを SearchBag インスタンスに入力する必要があります。
- どこから始めればよいですか?この動作はすぐに使用できますか?それとも SearchBagBinder を実装する必要がありますか? 私は IModelBinder をざっと見てみましたが、それについて頭を悩ませることはできず、DefaultModelBinder ソースは私を賢くしません。
- この ModelBindingContext とは何ですか?
- フォーム フィールドにアクセスするにはどうすればよいですか?
- 値がフォームではなく URL を直接入力して渡される場合はどうなるでしょうか。
- これに関する最新情報はどこにありますか (ほとんどのブログは古くなっています)。かつて Phil の投稿を読んだと思っていたのですが、もう見つからないようです。
どんな助けでも大歓迎です。
c# - アクションの参照型パラメーターを使用したHtml.BuildUrlFromExpression
私の用語が正しいことを願っています。そうでない場合は編集します。
Linq2Sqlクラスから、Colorクラスがあります。コントローラのアクションの1つは、このColorクラスのインスタンスを受け入れます。
このアクションへのリンクを作成したいので、
ViewData.Model.ActiveColorが、前述のColorのインスタンスから外れている場合。
これは次のようにレンダリングされます。
/ Color / Details?color=-コース外で私が考えていたものとは異なります。
私は何が間違っているのですか?カスタムModelBindersの作成を開始する必要がありますか?
編集
私は「-」がどこから来たのかを見つけました。明らかに、ActionLinkはToStringを呼び出しています。これは、何かを表示してから何かを識別するための方法が多いので、かなり奇妙です(GetHashの目的ではありませんか?)。オブジェクトにIserailizableインターフェイスを実装した後でも、ToStringメソッドを使用しています。ToString()を使用するのではなく、クラスをシリアル化する方法をどこかで定義できますか?完全に間違った方向に進んでいるような気がします。
asp.net-mvc - 永続化されていない変更されたオブジェクトをフォームなしでビューからコントローラーに戻す方法は?
短い:モデルバインディングはどのようにビューからコントローラーにオブジェクトを渡しますか?
Long:
まず、ユーザーが検索フォームで指定したパラメーターに基づいて、データベースからいくつかのオブジェクトが取得されます。これらのオブジェクトには、顧客に表示される (定義はしない) メタ データが与えられます (例: オブジェクトの名前と価格は地域によって異なります)。
後でサイト内で、ユーザーはこれらのオブジェクトの詳細を表示するリンクをクリックできます。これらのメタ データは表示には重要ですが、定義には重要ではないため、以前に変更されたオブジェクトをコントローラーに戻す必要があります。デフォルトの asp.net mvc モデルバインディングを使用すると、.ToString() メソッドが使用されます。もちろん、これは完全なオブジェクトを再作成するための関連する文字列を返しません。
ISerializable インターフェイスが関係していると思いましたが、そうではありません。望ましい効果を得るにはどうすればよいですか?私がこの質問に直面した最初の人だとは想像できないので、どこかで何かが欠けていると思います...
asp.net-mvc - SelectListを使用したモデルバインディング
Html.DropDownList(string NameSelectListInViewData)メソッドを使用してDropDownを作成します。これにより、正しい値で有効なSelect入力が生成されます。そして、すべてが順調です。
ただし、送信時に、ソースSelectListの値はバインドされません。
ケース: ViewData.SearchBag.FamilyCodes:
ドロップダウンを生成するHTML:
生成されたhtml:
私のコントローラーには、パラメーターsearchBagを使用したアクションがあります。
他のすべてのフィールドは正常にバインドされますが、選択ボックスのみはバインドされません。何か案は?
更新
将来の読者のために、このブログ投稿を読む価値があるかもしれません:http: //haacked.com/archive/0001/01/01/model-binding-to-a-list.aspx
asp.net-mvc - System.StackOverflowException が処理されませんでした (MVC モデルのバインド)
Model Binder でフォームをポストし直すと、このエラーが発生し始めました。問題をテストするために、ポストバックをモデルの 1 つの文字列プロパティに減らしましたが、それでもオーバーフロー エラーが発生します。誰がこれを引き起こすのかを提案できますか?
UPDATE 問題は、外部キーであるモデル内のプロパティに関連しているようです。このキーを削除すると、バインドが機能します。どうすればバインディングを行い、外部キー関係を含めることができますか?
asp.net - IList<> パラメータをバインドする ASP.NET MVC モデル
[私はこれを自分で解決しました。原因については私の回答を参照してください]
適切に設定されたコントローラー メソッドで IList<> 引数のフォーム値を取得するのに問題があります。
私のコントローラークラスは次のようになります。
わずかにトリミングされたフォーム:
次のようなマークアップが生成されます。
送信されたフォームの値を確認しましたが、正しい値です。sの正しい数ShoppingBasketItem
も ] に入れられますが、それぞれのとのSession["basket"
両方がゼロです。フォーム値のリストを正しくデコードしているように見えますが、プロパティ自体を取得していません。ItemID
ItemQuantity
私は MVC RC2 を使用しており、Scott Hanselman の記事に基づいて、私のコードが正しいと確信しています。何か不足していますか?
asp.net-mvc - ASP.NET MVC モデル バインディングの外部キー関係
モデルの外部キー関係をフォーム入力にバインドすることはできますか?
と の間に 1 対多の関係があるCar
としManufacturer
ます。Car
設定用の選択入力を含む更新用のフォームが必要ですManufacturer
。組み込みのモデル バインディングを使用してこれを実行できることを望んでいましたが、自分で実行する必要があると考え始めています。
私のアクション メソッドの署名は次のようになります。
フォームは Name、Description、Manufacturer の値を投稿します。Manufacturer は type の主キーですint
。名前と説明は適切に設定されますが、メーカーではありません。モデル バインダーは PK フィールドが何であるかを認識していないため、これは理にかなっています。それは、これを認識しているという習慣を書かなければならないということIModelBinder
ですか?私のデータアクセスリポジトリは各Controller
コンストラクターの IoC コンテナーを介してロードされるため、それがどのように機能するかはわかりません。
asp.net-mvc - カスタム IModelBinder とデータベース アクセス
私のasp.net mvcプロジェクトのユーザーオブジェクトについて、パスワードが有効かどうか、2つの一致するパスワードが入力されたかどうかなどを確認するカスタムモデルバインダーを作成しました.
ログイン名は一意である必要がありますが、モデルバインダーでそれを確認できるかどうか疑問に思っていましたか、それともこれは悪い習慣と見なされていますか?
問題は、コントローラーに到達する前にバインダーが呼び出されることです。そのため、dataContext の 2 つのインスタンスが浮かび上がり、データベースへの複数の接続が発生します。そのための種類のファクトリを設定できると思います。
これは、コントローラーで現在行っていることのコード スニペットです。