問題タブ [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 つのインスタンスが浮かび上がり、データベースへの複数の接続が発生します。そのための種類のファクトリを設定できると思います。
これは、コントローラーで現在行っていることのコード スニペットです。
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 モデル バインダーを使用しないのでしょうか? 配列エントリを作業項目と比較しましたが、それらはすべて同じ基準と値に適合しています。