問題タブ [asp.net-mvc-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.
c# - .net Web API でサービス層の ModelState が更新されない
さまざまなデータ クエリ用の Web API エンドポイントを持つ MVC ソリューションを実装しています。この投稿で説明されている手法を使用して、検証の問題をサービス層に分離しています。
特定の質問にスキップしたい場合は、この投稿の最後にTL;DRがあります。
これが私のApiController
コードです:
コードは_service.AddFriend(User.Identity.Name, id);
次のようになります。
次_validationDictionary
のようになります。
_repository.AddFriend(userName, id);
がエラーをスローして_validationDictionary.AddError("AddFriend", e.Message);
呼び出された場合、 にある ModelState オブジェクトは、 にある ModelState オブジェクトを_validationDictionary
更新しないことがわかりましたFriendsController
。
つまり、AddError
が呼び出された後、 の ModelState はHttpModelStateWrapper
有効ではありませんが、そのメソッドが返され、スコープが に返されるとFriendsController
、その ModelState は更新されておらず、まだ有効です!
TL;DR
HttpModelStateWrapper
のctor に渡した ModelState オブジェクトを取得するにはどうすればよいですか?FriendsController
その変更が の ModelState オブジェクトに反映されFriendsController
ますか?
asp.net-mvc-3 - ASP.NET MVC ビューモデル: 無効な投稿でバックエンドからリロードするか、すべてのプロパティを非表示の入力に入れます
私は ASP.NET MVC3 を使用しており、いくつかのプロパティを持つビュー モデルを持っています。その一部はユーザーに表示するためのもので、一部はユーザーからの入力として使用され、既定値を持つ場合があります。GET リクエスト (唯一のパラメーターは何を取得するかの識別子です) と、ビュー モデル全体をアクションのパラメーターとして受け取る投稿に対して、同じビュー モデルを使用しています。私のコントローラーは、NHibernate セッションからエンティティーをプルするビジネス・ロジック・レイヤーを介して取得されたエンティティーをビュー・モデルに取り込みます。
すべての読み取り専用フィールドの非表示の入力をビューに配置して、無効なビューモデルを使用して投稿した後にページがレンダリングされた場合にそれらが表示されるようにする方が良いですか、それともユーザーが実際に使用する入力のみを使用する方が良いですか?データを提供し、残りのバックエンドをリロードしてマージしますか?
ありがとう!
編集:
なぜ?
編集:
コントローラーは通常、次のようになります。
ビューは次のようになります。
asp.net-mvc - MVC2 コントローラーが送信時にビューからすべてのデータを受信しない
ユーザーが入力した条件に基づいてインポート レコードを表示する Web サービスを呼び出すアプリがあります。
各「インポート」には、0 から多数の PurchaseOrder、0 から多数のコンテナ、0 から多数の製品、0 から多数の請求書を含めることができます。
ビュー(問い合わせを表示する)は正常に動作しますが、送信ボタンをクリックすると、コントローラーがビューモデルを介して「インポート」情報を取得しません。「formCollection」を介してこれらのコントロールにアクセスできます。
何が欠けていますか????
これが私のコードです...
モデル...
これが私の見解です(部分的)
これが私のコントローラーです...
ビュー/コントローラーの充実を投稿していません....
ビューをレンダリングするために機能します....
ビュー/フォームを送信すると、コントローラーはビューモデルの主要部分のアイテムにのみアクセスできます(「リスト」には何もありません)。
「formcollection」を介してこれらの他のコントロールにアクセスできます。
ビューモデルに null があるのはなぜだろうと思っています。
asp.net-mvc - ネストされたクラスで viewModel をコーディングする方法
私の Web ページ / ビューには、1 つから多数のインポート レコードがあります。各インポート レコード内には、次の 0 から多数のものがあります。
- 注文書
- 輸送用コンテナ
- 製品
- 請求書
ビューモデルを次のようにコーディングしました。
上記でよろしいでしょうか?クラスは正しくネストされていますか?
サーバーからのデータを正しく表示するビューを取得できますが、フォームを「投稿」すると、ネストされたクラスのデータが null になります。
これは、入力コントロールが必要に応じて構築されていないためだと思います。
私の見解は次のようなものです。
どんな提案でも大歓迎です....
更新:「hiddenFor」アイテムを含めるようにビューを変更しました。
"import_rows" はコントローラーで null ではなくなりましたが、カウントは "0" です。まだ何か足りないはず……。
前もって感謝します。
asp.net-mvc-4 - MVC ビューモデル エラー
目標: ウェブサイトの管理者、マネージャー、およびエージェントを一覧表示する再利用可能なドロップダウン メニューを作成すること。これらのタイプのユーザーは、.NET Simplemembership webpages_Roles および webpages_UsersInRoles テーブルによって定義されます。
これまでのところ: データベースに 25 列の UserProfile テーブルがあります。UsersContext() EF からアクセスされる、同じ名前の対応するドメイン モデルがあります。
ドロップダウン メニューには、ユーザーの FirstName、LastName、および UserId のみをリストする必要があるため、完全なドメイン モデルを操作する代わりに、次の ViewModel を作成しました。
次に、以下を Account コントローラーに追加しました (まだ部分ビューで作業していないことに注意してください)。
次に、リスト ビューをスキャフォールディングし、厳密に型指定された ViewModel をベースにします。
ビルドに成功し、Web ページを実行すると、次のエラーが表示されます。
ディクショナリに渡されたモデル アイテムのタイプは「System.Data.Entity.Infrastructure.DbQuery
1[My.Models.UserProfile]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[My.Models.ViewModels.AdminsAndAgentsListVM]」です。
ビューを再作成しても、UserProfile に対して強く入力すると、正常に動作します。では、代わりに ViewModel に対して強く入力できるように、これを再処理するにはどうすればよいでしょうか? 可能であれば、例を挙げてください。私は C# と MVC に不慣れで、コードを直接見ることから本当に恩恵を受けています。助けてくれてありがとう!
編集 ----------------------------- UserProfile のオブジェクトは次のとおりです。
asp.net-mvc - 条件でReadOnlyデータ注釈を使用するにはどうすればよいですか?
ViewModelプロパティにReadOnlyデータ注釈を適用したい。ただし、これはチェックする必要があり、何らかの条件に基づいて適用する必要があります。
たとえば、データベーステーブルにフィールドマッピングを保存していて、ViewModelプロパティを確認したい場合、これが読み取り専用か編集可能かを確認します。
ここであなたの考えを共有していただければ幸いです。
asp.net-mvc - Linq のメソッドを EF に呼び出す
ViewModel を作成するために、メソッド GetName() を呼び出して UserID の FirstName と LastName を検索し、それをモデルに追加しようとしました。しかし、エラーは「Linq to Entities がメソッドを認識しません」と伝えます。
別の方法でこれを達成するにはどうすればよいですか?
私のコード:
c# - MVC 3 ビューモデルのプロパティ
viewModel のプロパティの構成について質問があります。私が理解している限り、viewmodel はできるだけシンプルにする必要があり、主に行うべきことは、データをビューにバインドすることです。
問題は、ビューモデルのプロパティを BL モデルと区別する方法です。たとえば、次のようなBLモデルがあります。
次に、別の BL モデルに次のように言わせます。
問題は、両方の BL モデルのデータを持つ必要がある ViewModel を作成するためのベスト プラクティスは何かということです。
1) 2 つのモデルからプロパティを複製し、デフォルト モデル バインディングを使用してビューからコントローラーにデータを転送し、ViewModels から BL モデルを作成し、リポジトリ更新データを介して ? この場合、コードの重複があります...
2) ViewModel は次のようになります。
この場合、デフォルトのバインディングは機能しません (間違っている場合は訂正してください)。カスタム モデル バインダーまたはこのようなものを作成する必要があります。
asp.net-mvc - MVC ビュー レンダリングは、ビュー モデルで渡されたデータを考慮しません
ユーザーが一連のデータベース レコードを段階的に確認できるようにする MVC アクション メソッドを作成しようとしています。ユーザーが更新を投稿するたびに、更新がデータベースに送信され、レビューのために新しいレコードが取得およびレンダリングされます。
ただし、私の MVC ビューは、投稿されたビュー モデルと、データベース クエリの結果として作成された新しいビュー モデルの両方のデータを組み合わせているようです。ビューがビュー モデルからプロパティ値を単純にレンダリングする場合、渡されたビュー モデル インスタンスの値を正しく使用しますが、HTML フォーム コントロールをビュー モデル プロパティにバインドする場合は、ポストされたビュー モデルの値を使用します。これは、1 つのビューが、1 つのビュー モデル インスタンスの 1 つのプロパティに対して 2 つの異なる値を表示できることを意味します。
これはアクションメソッドの非常に単純化されたバージョンです...
...そしてビューモデル...
...そして、上の画像を作成するために使用されたビュー...
MVC ビューがモデル データを検出する方法を誤解しているようです。渡されたビュー モデルにフォーム コントロールをバインドするようビューに明示的に指示するために使用する代替構文はありますか?
ありがとう、
ティム。