問題タブ [viewmodel]
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 用語につまずく - なぜ「ViewModel」なのか?
私は ASP.NET MVC の初心者ですが、これまで多くのモデル ビュー コントローラー フレームワークを使用してきました。
私は最近、特定のビューが必要とする (実際には、ViewData に割り当てられている) データの断片を( NameOfView ) ViewModelという新しいクラスにまとめる規則に出くわしました。
ビュー/コントローラーの相互作用によって提供される関数に関連付けられるようにこのデータを収集すると、ヘルパー構造体、またはクロージャー メカニズム (「変数のコレクションをカプセル化する」という意味で) としてさえ思い浮かびます。
ビューでもモデルでもないのに、なぜ「ビューモデル」と呼ばれるのでしょうか?
他の誰かが名前が紛らわしいと思いますか?
編集:コントローラーがプロパティを設定できるようにビューにプロパティを配置するだけで何が問題なのですか?(他のMVCフレームワークのように)
asp.net-mvc - ASP.NET MVC で ViewModel をハイドレートする
多くのユーザー コントロールで構成されたページがあります。このページのビュー モデルはかなり複雑です。
このページには、フィルタリング、ソートなどの情報を含む PostModel もあります。
単純な PostModel が検証された後、コントローラーは 3 つ以上のリポジトリを開き、それぞれに複数の呼び出しを行い、ビュー モデルを構築します。控えめに言っても、私のコントローラー アクションはかなり大きくなりました。
これは私が取り組んできた中で最も複雑なページであり、よりシンプルにする方法を決めるのに苦労しています.
私が最初に考えたのは、バインディングの検証後にリポジトリを呼び出して ViewModel を返すビュー モデル ファクトリを作成することでした。
次に、PostModel を検証し、ViewModel を 1 ステップでハイドレートするカスタム モデル バインダーを作成することを考えました。
私の質問は、複雑なビュー モデルをどのようにハイドレートするかということです。
これを書いているうちに、Html.RenderAction を使用して、ページという野獣を構成する各ユーザー コントロールのモデルを作成するというアイデアが浮かびました。
アップデート:
リポジトリは WCF サービスを呼び出し、アプリケーションはより大きな SOA アーキテクチャの一部です。
cocoa - ModelControllerオブジェクトからNSTextFieldに書き込めません
AppControllerオブジェクト内から常にモノリシックなコードブロックを実行した後、個別のモデルコントローラーオブジェクトを使用してコードをモジュール化する方法を学びました(非常にすっきりしていて、操作の混乱が少なくなります:-))
私の単純なテストアプリには、メインのAppControllerと2つのモデルオブジェクト(Model1とModel2)があります。AppControllerからモデルにデータを正常に渡すことができ、モデル自体がメソッドを実行し、渡されたデータを意図したとおりに「内部的に」処理できますが、 UI。これが私のコードの関連部分です:
AppController.mで#import"AppController.h"
... Model2.h #import
...そして最後にModel2.mで#import"Model2.h"
両方のモデルオブジェクトには共通のNSTextFieldへのアウトレットがあり、両方のオブジェクトからフィールドにコントロールドラッグして接続しました。私のAppControllerはNSTextFieldについて知りません (そして私は、知りたくもないと思います)。コントローラオブジェクトとモデルオブジェクトの間にIB接続は確立されていません。
NSLogは、モデルオブジェクトが作成されており、渡された値がそこまで到達していることを示していますが、そこからGUIウィンドウのテキストフィールドには到達していません。コンパイラのエラーや警告は表示されません。ある種の「setTarget:」呼び出しが欠落しているのでしょうか?
任意のヘルプ/アイデアをいただければ幸いです。ありがとう :-)
wpf - ビューモデルとモデルのコレクションを同期させる方法
私は wpf ツールキット データグリッドを使用して、AccountViewModels の観察可能なコレクションを表示しています。
問題は、グリッドからアカウントを削除するときです。ObservableCollection から削除してユーザーに視覚的なフィードバックを提供したいのですが、「IsDeleted」フラグをオンにして、アカウント モデルの基になるリストを同じままにしておきたいのです。アカウント モデル。
その後、変更がコミットされるたびに、サービスはデータベースで追加/更新または削除するアカウントを認識します。
CollectionChanged イベントを購読しています:
次に、何かが削除されるたびにビューモデルのモデル isdeleted フラグを true に設定します。
しかし、明らかにこれにより、監視可能なコレクションから削除されます。そのため、変更をコミットすると、IsDeleted フラグが設定されたアカウントはなくなります。つまり、それらはすでに削除されています。
これは、2 つのリストを維持する必要があるということですか? 1 つはアカウント モデルのリストで、もう 1 つはアカウント ビューモデルの監視可能なコレクションです。これは厄介なようで、これを行うためのより良い方法が必要です。
asp.net-mvc - ViewModel には独自のロジックがありますか?
ViewModel フィールドを割り当てる場合、データの表示方法を決定する ViewModel オブジェクトにドメイン オブジェクトを直接渡す必要がありますか、それともサービスなどの別のクラスでモデルから ViewModel にデータを割り当てる必要がありますか?
また:
編集:ビューモデルをレシーバーとプレゼンターに分割することに意味はありますか? (更新時に特定のフィールドのみをバインドする代わりに?)
c# - ASP.NETMVCViewModelおよびDropDownList
ViewModelに2つのプロパティがあります
Html.DropDownListForを使用してこれを編集したい
MVCにViewModelとの間でデータを自動シリアル化させたいので、次のことができます
これを達成するための最良の方法は何ですか?
asp.net-mvc - ASP.Net MVC 2 の検証では、パターンと使用に関してもう少し考える必要がありますか?
これが土地の配置です。ほとんどの人と同じように、私はドメイン オブジェクトとビュー モデルを持っています。ビジネス オブジェクトを変更する必要なく、特定のビュー コンテキスト専用のモデルを作成できるため、ビュー モデルを使用するというアイデアが気に入っています。
私が抱えている問題は、ドメイン オブジェクトで定義されたタイプ レベルの検証と、それらのルールをクライアントに取得することです。この場合、データ注釈を使用して検証ルールを記述しているとしましょう。データをドメイン オブジェクトからビュー モデルに移動すると、ビュー モデルはインターフェースに実行させるべき検証を認識しなくなります (検証がドメインオブジェクトで定義されています)。
MVC 2 を使用すると、現在のオブジェクトの検証規則に基づいて、クライアント/サーバー側の検証を自動的に実行できます。しかし、検証ルールはビュー モデルではなくドメイン オブジェクトで定義されるため、これを機能させるには、ビュー モデルで検証ルールを複製する必要があります。
他の人はこの種の問題にどのように対処していますか? 私の考えでは、データをドメイン オブジェクトからビュー モデルにマッピングするだけでなく、検証ルール全体にもマッピングする必要がありますが、この問題について他の人が話しているのを見たことがありません... Brad Wilson が最近この問題について話しましたしかし、ドメインオブジェクトとビューモデルのルールの重複については実際には対処していません...どう思いますか?
乾杯アンソニー
.net - 異なる役割/承認レベルの同じエンティティタイプ(任意のORM)の異なるバージョン
たとえば、次のことを考慮してください。
一部のユーザーの場合、ビューモデルはとのみを必要name
としemail_address
ます。ssn
他の人は、それらのプロパティに加えて、、age
およびを含むビューモデルを持っているかもしれませんhome_address
。ビューが取得する統計家もいるとしましょage
うhome_address
。
IStaffBasic
これで、これを、、IStaffDetails
およびインターフェイスの継承に分割してIStaffStats
、特定のビューモデルのAPIを適切なプロパティに制限することができます。
ただし、このエンティティがネットワークを介してデータサービスから取得される場合でも、追加の詳細が含まれているため、発生してはなりません。
したがって、 (A)これらのバージョンごとに完全に異なるエンティティタイプを作成し、タイプごとに多くの追加のほぼ重複するクエリ操作でサービスレイヤーAPIをいくらか汚染するか、
(B)常にStaff
エンティティを返す方が良いでしょうか? 1)サービスでの承認チェックに基づいて設定された除外プロパティを使用してサービスからそれらを返しnull
、(2)上記のようにビューモデル内で制限されたインターフェイスを使用するか、
(C)私が使用していない非常にエレガントなパターンまたはソリューションを使用します検討しましたが、それについてあなたは私に言うつもりです。
オプションAは、ビューモデルレベルではよりクリーンに見えますが、サービスAPIは厄介なものになります。オプションBは、サーバーでのエンティティの処理を複雑にするようですが、オープンクローズの原則をより適切に順守します。
考え?
asp.net-mvc - 複数のキーによるリポジトリからのオブジェクトのモデル バインディング
次のルートを想定します。
これらの 2 つのパラメーターregion
とstorehouse
全体で、単一のエンティティー a を識別しますStorehouse
。したがって、いくつかの倉庫のコンテキストで一連のコントローラーが呼び出されています。そして、次のようなアクションを書きたいと思います:
ここであなたの考えを読むことができます:「カスタムモデルバインダーを書いてください、男」。そうです。ただし、質問は
カスタム モデル バインダー内で魔法の文字列を回避するにはどうすればよいですか?
これが私の現在のコードです:
単一のキーがあれば、bindingContext.ModelName
使用できます...
おそらく、すべてのアクションにオブジェクトを提供する別の方法がありStorehouse
ます。つまり、コントローラーのプロパティとして宣言し、Controller.Initialize
.
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 を存在させて動作させるにはどうすればよいですか。
ありがとう、
マイク