問題タブ [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 - 複雑なviewModelsを使用したコントローラーアクションの単体テスト
ASP.NET MVCを使い始めたばかりで、単体テストも初めてです:)これまでのところ、とても良いです。
ビューモデルを使用してインデックスビューを設定するコントローラーアクションがあります。コントローラーのコンストラクターで偽のサービスクラスを渡すことができるため、コントローラーアクションのテストは簡単ですが、ビューモデルは非常に複雑で、インスタンス化時に独自のサービスクラスをフェッチします。
コードはこれをより明確にする必要があります...
コントローラのアクション:
Viewmodelクラス:
編集:
コントローラのアクションをテストするときに、ビューモデルに偽のサービスクラスを使用させるにはどうすればよいですか?
最初のコンストラクターを捨てて、常にコントローラーからサービスを渡す必要がありますか、それとも別の方法がありますか?
乾杯、
ニック
asp.net-mvc - ASP.NETMVCでのViewModelの検証
ASP.NET MVCで検証を実装する方法に関するヒントのほとんどは、モデル(モデルとコントローラーの間にサービスレイヤーを構築するか、検証属性でモデルのプロパティを装飾する)に集中しているようです。
私のアプリケーションでは、コントローラーとビューの間のすべての通信にViewModelsを使用しています。
「EmailAddress」というプロパティを持つ「LoginViewModel」というログインページのViewModelがあります。
ユーザーが自分の電子メールアドレスを入力して[送信]をクリックすると、このViewModelが入力されてコントローラーに送信され、そこで電子メールアドレスが検証されます。
有効なメールアドレスである必要があり、ユーザーはシステムに登録されているドメインのユーザーである必要があります。
これに検証を追加する便利な方法は何でしょうか?検証をViewModel自体に入れる必要がありますか?それとも、コントローラーにとどまる必要がありますか?
jquery - jQueryはViewModelのPOSTをASP.NET MVCのコントローラーに実行できますか?
サーバーにポストバックするときにカスタムビューモデルにバインドされるように、Html テキストボックスを作成しました。
これは、従来の POST の場合にうまく機能します。次に、次のような方法でコントローラー側で受信できます。
知りたいのですが、jQuery 経由で POST を実行しても同じ動作をすることは可能ですか?
asp.net-mvc - AutoMapper はドメイン モデルを平坦化しますが、逆のことをしますか? そうでない場合、何をしますか?
ここで以前の質問の 1 つに回答があったため、AutoMapper について調べています。
AutoMapper は複雑なドメイン モデルを平坦化すると書いてありますが、逆のことをするものが必要です。ビュー モデル (フラット化されたドメイン モデル) を複雑なドメイン モデルに接続して、ビュー モデルをドメイン モデルにすばやく変換できるようにする必要があります。
ビュー モデルを取得して複雑なドメイン モデルにする AutoMapper に似たものはありますか?
asp.net-mvc - ASP.NETMVCのプレーンオブジェクトで検証が機能しない
'Model'オブジェクト(LinqToSQLによって生成されたもの)をコントローラーに投稿すると、'ModelState.IsValid'をクエリできます。いずれかのプロパティに検証属性があり、値が検証されない場合は、設定されます。 'false'に。
ただし、自分のクラスのカスタムオブジェクトを投稿する場合、そのクラスのプロパティに検証属性があり、誤った値が指定されている場合でも、ModelState.IsValidは常に「true」を返すようです。
これがDataContextモデルオブジェクトでのみ機能するのはなぜですか?これらのオブジェクトがModelState.IsValidで機能するのに、通常のクラスでは機能しないのはどういうことですか?
通常のクラスで動作させるにはどうすればよいですか?
コントローラーコード:
ViewModelコード:
wpf - ViewModels を使用したグリッド - WPF
これがすでに尋ねられている場合は申し訳ありませんが、私はこれを正しく行っていることを確認したいだけです.
10 個のプロパティを持つドミアン オブジェクトがあるとします。モデルのほぼすべてのプロパティを表示したいメイン フォームにグリッドがあります。
ドメインオブジェクトをラップしてグリッドビューに表示するビューモデルを作成しましたが、すべてのプロパティを再度公開する必要があります。ビューモデルを介してモデルに直接バインドするのは汚いと感じ、目的を少し損なうだけです。
たとえば、私はこれがあまり好きではありません。
ここで、DomainObject はビュー モデルのプロパティです。
私の主な質問は、モデルをグリッドにバインドするためだけに、ビュー モデルを介してモデルのすべてのプロパティを公開する必要があるかどうかです。
編集: 追加情報として、domian オブジェクトは LINQ-To-SQL オブジェクトであるため、INotifyPropertyChanged を実装しているとは思いませんが、よくわかりません。
asp.net-mvc - ASP.NET MVC - コントローラーの仕事
MVC でのコントローラーの仕事と混同し始めていると思います。
5 つの機能を公開するサービスがあります。
- キュー内のパッケージを一覧表示する
- パッケージを取得
- パッケージを削除
- パッケージを受け入れる
- パッケージを拒否
私の ASP.NET MVC コントローラーはこのサービスに依存しており、通常はアクションでサービス呼び出しを実行できます。私は今のところ幸せです。
次に、ViewModel の結果を構築します。コントローラー内でこれを行うと、コントローラーには爆発的な依存関係リストが作成されます。追加された各アクションは、ビューモデルを構築するために依存関係を増やし、これらはすべてコントローラーによって継承されます。私はこれがあまり好きではありません。N個の異なるビューモデルビルダーに依存するこのコントローラーを構築していますが、リクエストごとにそのうちの1つだけを使用しています。
そこで、これらをすべて引き出して、各ビュー モデルに固有のアクション フィルターを適用することを考えていました。まだやってませんが、大丈夫そうです。
これが私に提起している問題は、次のとおりです。コントローラーの責任は何ですか? ビュー モデル ビルドをフィルターにプルすることになった場合、コントローラーは、ルートにサービス コールを実行させる (そしてフィルター プラグインを提供する) ことしかできません。代わりに、各ビューモデルの構築をコントローラーに任せると、混乱してしまいます。
コントローラーではなく、リクエストごとにアクションをインスタンス化したいようですが、フィルターを悪用してそれを取得しているだけですか?
asp.net-mvc - ASP.NET MVC モデル/ViewModel の検証
Linq-to-Sql に、データ注釈属性と xVal への参照でマークされた部分クラスを持つモデル クラスがあります。
ビューをモデルに直接バインドすると、xVal によって生成された JS とサーバー側の二重チェックの両方で、すべてがうまく機能します。
私のビューの多くは 1 つの特定のモデルへの入力を受け付けないため、ビュー モデル クラスを設定しています。モデル インスタンス全体を公開する代わりに、ビューで設定できる/必要なプロパティをモデルに公開します。
このアプローチはビュー モデル クラスを正しく設定し、リポジトリはレコードを正しく設定できます。
ただし、検証をまったく通過しません。発行されたクライアント コードを確認しましたが、xval の検証配列は空です。さらに、IsValid のサーバー側チェックは常に true です。
このように検証のためにビューモデルのプロパティを介してデータ注釈をプルさせることはできますか、それとも別の方法で行う必要がありますか?
asp.net-mvc - ビューモデルにドメインモデルほど多くのフィールドがない場合、MVC で値を無視/永続化するにはどうすればよいですか?
fluentNhibernate と Asp.net MVC を使用しているサイトがあります。ユーザーがそのレコード (オブジェクト) の 10 個のプロパティのうち 8 個を編集できるようにする編集ビューがあります。フォームを送信してモデルがバインドされると、編集できない 2 つのフィールドが、プロパティのタイプに応じて空の文字列またはデフォルトの DateTime 値としてビューモデルに返されます。
ビューモデルをドメイン エンティティにマップするために AutoMapper も使用しているため、データベースからオブジェクトの新しいコピーを読み込んで、不足している 2 つのプロパティを手動で設定することはできません。編集したくないフィールドを保持する最良の方法は何ですか?
機能する 1 つの方法は、ビューの非表示の入力フィールドに値を保持することです。それは機能しますが、気分が悪くなります。おすすめを教えてください。AutoMapper でこの目的の機能を構成する方法はありますか?
更新: わかりましたので、フィールドを無視しようとしているわけではないと思います.nullまたは空の文字列値を保持しないようにしています。AutoMapper のフィールドを無視すると、それが行われます。リポジトリに保存する前にそれらをマップしようとすると、それらは無視され、null になります。