問題タブ [updatemodel]
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でのUpdateModelの正しい動作は何ですか?
UpdateModel
ASP.NET MVCのメソッドの観点から、皆さんが「正しい動作」と見なされるべきだと感じていることを知りたいと思います。
私がここで尋ねる理由は、おそらくこの機能が「設計による」ものであるかどうか、誰かがそれがそのようになっている理由を明確にすることができ、おそらくそれを別の方法で呼び出して目的の機能を実現する方法であると思います。人々の%はこれが機能することを望みますか?
本質的に、私の不満は、内のバインディングプロセスの動作にありますUpdateModel
。
フォームのデータフィールドがデータベース内のモデルを反映する単純なアクションメソッドを介してフォームを更新する場合Save
、最初にリクエストを保存するために、DBから既存のモデルを取得してから、関連するフィールドを更新します。これらは変更され、経由で送信され、既存のモデルにFormCollection
更新されました。UpdateModel
この機能は機能しますが、このDBが入力されたオブジェクトの既存のプロパティのいずれかが「リセット」されているようです。つまり、明らかに新しいオブジェクトと一致するものを除いて、それがまったく新しいオブジェクトであるかのように、nullまたは初期化のデフォルトに設定されているということFormCollection
です。
これは問題です。これは、オブジェクトに存在するが、必ずしもフォームに存在するとは限らない既存のプロパティ(子コレクションやオブジェクト、日付、UIに面していないフィールドなど)が空であり、半分のデータが残っているためです。おそらくIDのスタックを含むすべての欠落データが0に設定されているため、DBに保存できない使用不可能なオブジェクト。
これは望ましくない動作であり、でUpdateModel
プロパティが一致する場合にのみプロパティを更新する必要があると思いますFormCollection
。これは、既存のすべてのプロパティは変更されないが、更新は設定されることを意味します。ただし、これまでに推測されたことから、明らかにそうではありません。オブジェクトの新しいコピーがフォームからプロパティを更新し、新しいオブジェクトを返すように見えます。
最後に、これがどれほどの負担であるかという観点から言えば、半複雑なフォームを保存し、既存のすべてのオブジェクトデータを保持するための唯一の方法は、各プロパティを対応するフォームプロパティと手動で結合することです。フォームに存在するプロパティのみが更新されることを保証します。
私は推測する、
- これに同意する人は設計によるものですが、私の形のアプローチは最良の方法と結婚していますか?
- または、これでどのようにこれに取り組みましたか?
この人たちについて、お気軽にご意見をお聞かせください。ありがとうございます。
この問題に苦しんでいる人の別の例を次に
示します。複雑なデータ型のコレクションを使用してUpdateModelを呼び出すと、バインドされていないすべての値がリセットされますか?
asp.net-mvc - MVC-UpdateModelとDropDownLists
私はMVCを実行しており、ドロップダウンリストにルックアップ値があります。UpdateModelを呼び出す場合、ルックアップが更新される前の値のみを呼び出し、その後は何も呼び出しません。エラーは発生しません。
コントローラで次のコードを編集、作成、使用できます。
私の見解では、次のようになっています。
これは問題なくバインドされているようで、ドロップダウンの編集で選択した値を取得して作品を作成できます。
MVCを実行するのはこれが初めてなので、助けていただければ幸いです。
asp.net-mvc - Asp.net MVC UpdateModel(myClass) の基本的な問題
Asp.net MVC 1 アプリのコントローラーで、UpdateModel を使用してコントローラーの POST データを変数に入力したいと考えています。私は何十もの例を見てきましたが、最も基本的なものでさえ、静かに失敗しているようです。
これは、機能しない非常に基本的な例です。私は何を間違っていますか?
c# - サービス層による検証、エンティティの更新方法
アプリケーションに次のようなサービス レイヤーを実装しました: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx
(私はLinq2SQLを使用しています)。今、Edit ActionResult の実装に問題があります。Create (Post) ActionResult で、サービス メソッドを使用します。
大丈夫。Edit ActionResult での私の問題は次のとおりです。エンティティの更新を実装するにはどうすればよいですか?
リポジトリには、次の Update メソッドがあります。
次に、サービスはリポジトリを呼び出します。ただし、フォームで行われた変更はモデルに「送信」されないため、エンティティは新しい値で更新されませんでした。
コントローラーで「UpdateModel」を呼び出すこともできますが、サービスで Validate も呼び出す必要があります。ただし、検証ロジックはコントローラーよりもサービスにありません。
私の質問を理解していただければ幸いです。
asp.net-mvc - ASP.NET MVC Updatemodelは更新されていませんが、エラーはスローされていません
これが更新されないのにエラーがスローされない理由はありますか?
asp.net-mvc - ASP.NET MVC の UpdateModel で主キー列を無視するにはどうすればよいですか?
ASP.NET MVC コントローラーのメソッドを使用して新しく作成したオブジェクトを挿入しようとしている GUID 主キーを持つテーブルがありますUpdateModel
(db は LINQ-to-SQL データ コンテキストです)。
まず、モデルの編集および作成用に自動生成されたビューに、ユーザーが編集するための主キー フィールドが含まれているのは奇妙に思えますが、それらを削除するのは簡単です。
しかし、主キーがフォーム コレクションの一部として渡されない場合に、への呼び出しでUpdateModel
例外がスローされるという問題が発生しています。
UpdateModel
主キー列に、ユーザー (ひいては への呼び出し) がいじってはいけないものとしてフラグを立てる方法がありませんか? 配列を追加してincludeProperties
、主キーの名前を除外することもできますが、それはあまり DRY ではありません)。
主キーを組み込んだ非表示フィールドをフォームに追加することもできます。GUID 主キーを使用すると、Create への GET 要求でこれを行うことができます。
asp.net-mvc - 既定のモデル バインダーでリフレクションによって作成されたオブジェクトを使用する場合の ASP.NET MVC の問題
formCollectionが渡されたときにオブジェクトがUpdateModelで更新されないという ASP.NET MVC で奇妙な問題が発生しています。更新中のオブジェクトがリフレクションによって作成されている場合、 UpdateModelが正しく機能していないように見えます。
シナリオ: 約 50 のルックアップ テーブルを持つアプリケーションがあります。各ルックアップ テーブルには、id、title、description、isactive、createdon などの典型的なフィールドを含むまったく同じスキーマが含まれています。50 個のビューを作成するのではなく、すべてのルックアップ テーブルのデータを表示できる単一のビューが必要でした。IReferenceEntity というインターフェイスを作成し、ルックアップ テーブルを表す各 POCO に実装しました。
このインターフェイスを使用すると、ルックアップ テーブルのレコードをビューに簡単に取り込むことができます。(次の方法でアイテムをビューに渡します。)
データベースからビューまで、すべてが完璧に機能します。
ただし、投稿時にモデルを更新しようとすると、いくつかの問題が発生します。
次のようにオブジェクト参照を明示的に宣言すると、すべてが完全に機能し、オブジェクトの値がフォームの値で更新されます。したがって、データベースを更新できます。
残念ながら、オブジェクト タイプをハード コーディングすると、インターフェイスを使用する理由が完全に無効になります。
(アプリケーションの主な目的は、「特別な」ことを何もせずにルックアップ テーブルなどの新しいテーブルを動的に追加できるようにすることです。これは、読み込まれたアセンブリを反映し、特定のインターフェイスまたは基本クラスを実装するクラスを見つけることによって達成されます。 )
私の戦略は、ポストバック時にオブジェクトの具体的な型を決定し、リフレクションによってその型のインスタンスを作成することです。(型を決定するために私が使用するメカニズムはやや原始的です。フォーム内の非表示フィールドとして含めています。より良いアイデアを歓迎します。)
次のいずれかの方法でリフレクションを使用してオブジェクトのインスタンスを作成すると、UpdateModel によって更新されるオブジェクトはありません。
注: リフレクションによって作成されるオブジェクトがすべて適切なタイプであることを確認しました。
なぜこれが起こっているのか誰にも分かりますか?私はやや困惑しています。
私が本当に「苦労した」場合は、これらの参照エンティティ/ルックアップ オブジェクトのいずれかをインスタンス化するファクトリ オブジェクトを作成できます。ただし、これにより、新しいルックアップ テーブルを透過的に追加および検出できるようにするアプリケーションの機能が損なわれ、それほどクリーンではありません。
また、インターフェイスではなく、実際の ReferenceEntity 基本クラスから派生させることもできますが、これが違いを生むかどうかは疑問です。この問題は、リフレクションによって作成されたオブジェクトをモデル バインダーで使用する場合に発生するようです。
どんな助けでも大歓迎です。
アンソニー
asp.net-mvc - ASP.NET MVC UpdateModel はハッキングに対して脆弱ですか?
カレンダーのような ASP.NET MVC アプリケーションがあります。NerdDinner の例に従って、UpdateMethod() を使用して編集ページの結果を更新しています。
私のアプリでは、特定のイベントは完全にカスタマイズ可能で、特定のイベントは部分的にしかカスタマイズできません。部分的にカスタマイズ可能なイベントを編集するための編集フォームにはこれらのフィールドしかありませんが、誰かが不足しているデータを使用して独自のフォームを作成し、私のサイトに投稿する可能性があります。そうする場合、誰かが一部/すべてのフィールドを変更できないようにするにはどうすればよいですか? さらに悪いことに、ID (主キー) を変更しようとした場合はどうなるでしょうか?
UpdateModel() は非常に基本的なハッキングに対して脆弱であるように感じます。私の恐れは正当なものですか、それとも私が見逃しているものがありますか?
linq-to-entities - Linq-to-Entities で EDMX ファイルからテーブルを削除した後、テーブルを元に戻すにはどうすればよいですか?
Linq2Entities モデルに問題があります - ここで明らかな何かが欠けている可能性があります。
これが私がしたことです:
- EDMX モデル ファイルを追加しました
- モデルに TableX を追加しました
- SQL Management Studio に戻り、TableX を更新して主キーを変更しました
- EDMX ファイルに戻り、[データベースからモデルを更新] をクリックします。
- TableX が更新されましたが、誤って更新され、新しい主キーが再割り当てされませんでした
- 次に、モデルから TableX を削除しました
- 「データベースからモデルを更新」をクリック
- TableX は [追加] タブに表示されるようになりましたが、[更新] タブのままです
- [更新] タブをクリックし、[完了] をクリックします。
- TableX が再表示されない
別のデータベースと (明らかに) 別のテーブルを使用して新しいプロジェクトでこのプロセスを繰り返しても、同じことが起こります。
テーブルをモデルに戻せないのはなぜですか?!
asp.net-mvc - MVC Updatemodel が DropDownList から更新されない
編集画面には次のように表示されます。
そして私のコントローラーで:
レコードを編集してテキスト フィールドを変更すると、すべてが正常に機能しますが、ドロップダウン リストに接続されている項目を変更すると、変更がキャンペーン オブジェクトで更新されません。確認this.ValueProvider["Campaign.CandidateID"]
しましたが、データはそこにあります!
ちなみに、編集画面の表示中は、選択リストで正しい候補を選択しています。
クラスの CandidateID が int であるのに対し、ValueProvider が文字列を提供しているという事実から問題が発生する可能性はありますか?
私は困惑しています。