問題タブ [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.

0 投票する
1 に答える
1901 参照

asp.net-mvc - リストを利用するMVCViewModel

リストと文字列値を利用するビューがあります。

現在、私は次のことを行って、それをビューに渡します。

ご覧のとおり、現在、ノート(リスト)をビューに渡してから、ビューで直接ViewBagを取得します。

私がやりたいのは、このためのビューモデルを作成することです。必要なもののビューモデルを作成するためのベストプラクティスを知りたいです。

これが私がViewModelのために思いついたものです:

に表示されているNotesをどこで作成するか、別のファイルで呼び出される別のクラスを作成するか、それに適切なタイプを割り当てる方法について、少し迷っていIEnumerable<Notes>ます。はLINQクエリを表します。Notes.cs

0 投票する
2 に答える
198 参照

asp.net-mvc - MVC c# ViewModel とテーブル オブジェクト

私はそのようなビューモデルを持っています

私のコントローラーでは、コントローラーがビューモデルを認識できるように、ビルドを行った後に次のことを行います。

ただし、次のエラーが表示されます。

{"オブジェクト参照がオブジェクト インスタンスに設定されていません。"}

0 投票する
1 に答える
269 参照

asp.net-mvc-3 - Can't populate ViewModel

MVC3 project.

I have several classes: Account, Address, Phone etc. which I set up in a view model

In the controller GET action I just call the view

In the View I pass the View Model

I then use @Html.EditorFor's to populate all the fields and successfully pass it to the POST Action and create the records in the db. So all that code is working.

The problem arises when I try and pre-populate some of the properties. I do the following in the GET action.

The code passes Intellisense but when I run I get the "NullReferenceException was unhandled by user code - Object reference not set to an instance of an object" error.

I get the same error if I try and populate using code in the View.

I need to be able to programatically populate properties in both the controller and the View. I've read several SO posts on how to populate a view model in the controller and modeled my code on them but for some reason my code is not working. What am I'm doing wrong here? How should I go about it in both the Controller and the View? I get that the objects are null when created but can't figure out how to get around that.

Thanks

0 投票する
1 に答える
7986 参照

asp.net-mvc-3 - ViewModel の使用時に MVC3 カスタム検証エラー メッセージが表示されない

まとめ

Question:ViewModel の使用時にカスタム検証エラー メッセージが表示されないのはなぜですか。

Answer:カスタム検証は、クラスではなくビューモデルに適用する必要があります。コード例については、@ JaySilk84の回答の最後を参照してください。

MVC3、使用するプロジェクト

  • jquery-1.7.2.min.js
  • modernizr-2.5.3.js
  • jquery-ui-1.8.22.custom.min.js (アコーディオン プラグイン用に jQuery.com で生成)
  • jquery.validate.min.js および
  • jquery.validate.unobtrusive.min.js

ビューの dataannotations とコントローラーの ModelState.AddModelError の両方について、プロジェクトで検証作業を行っているため、すべての検証コードが適切に構成されていることがわかります。

ただし、カスタム検証では、コードでエラーが生成されますが、エラー メッセージは表示されません。

POST アクションのデバッグでドリルダウンすると、カスタム検証によりモデルの状態が失敗し、エラー メッセージが適切な値フィールドに配置されますが、モデルがビューに送り返されたときにエラー メッセージが表示されません。コントローラーには ModelState.AddModelError コードもあり、そのメッセージは表示されます。一方が機能し、他方が機能しないという点で、それはどのように異なる方法で処理されますか? そうでない場合、エラーメッセージが表示されないようにするものは他にありますか?

更新 1:

ViewModel を使用してビューでモデルを作成しています。ViewModel を削除すると、エラー メッセージが表示され始めました。メッセージに ViewModel を追加するとすぐに、表示が停止しました。ViewModel でカスタム検証を成功させた人はいますか? 機能させるために他に何かしなければならなかったことはありますか?

更新 2:

これら 2 つの単純なクラス (Agency と Person) を使用して、新しい MVC3 プロジェクトを作成しました。

ここにコントローラーコードがあります

景色

ビューモデル

代理店のみがビューに表示されると、検証エラーが表示されます (18 歳未満の生年月日)。ViewModel が表示されると、エラーは表示されません。ただし、カスタム検証では常にエラーがキャッチされ、ModelState.IsValid が失敗し、ビューが再表示されます。誰でもこれを複製できますか?理由と修正方法についてのアイデアはありますか?

更新 3:

一時的な回避策として、ValidationResult にパラメータを追加して、Validation をフィールド レベル 1 (モデル レベル 1 に対して) に変更しました。

これに関する問題は、エラー メッセージがフォームの上部ではなくフィールドの横に表示されることです (これは、ユーザーがエラー メッセージを表示せずにフォームに戻されるため、たとえばアコーディオン ビューでは適切ではありません)。この二次的な問題を修正するために、このコードを Controller POST アクションに追加しました。

モデル レベルのエラー メッセージが ViewModel で表示されないのはなぜですか (詳細については、JaySilk84 への私の回答を参照してください)。

0 投票する
4 に答える
3619 参照

c# - 部分ビューでレンダリングされたモデルプロパティ値が正しくありません

親ページのビューモデルと同じ名前のプロパティがモデルに含まれている、強く型付けされた部分ビューがあります。何らかの理由で、レンダリングエンジンは、期待値ではなく、親ビューモデルの値をレンダリングしています(少なくとも私が期待する値です!)

親ページビューモデルの抽出:

子ページビューモデルの抽出:

親ページの抽出(Razor):

部分ビュー抽出:

したがって、基本的にレンダリングされた出力では、非表示フィールドには、部分ビューに渡される値ではなく、親ビューモデル要素の値が含まれます。@ChildViewModel.Id@の名前を@ChildViewModel.ChildId@のような名前に変更すると期待どおりに機能するため、これは間違いなく名前が原因です。興味深いことに、デバッガーでビューモデルの値を調べると、正しい値が表示されます。間違っているのはレンダリングされた出力だけです。

これを回避する方法、または私がやろうとしていることを行う「正しい」方法はありますか(ajax検証/テーブル行への更新の投稿のためにテーブルにミニフォームをレンダリングしています)

ありがとう、

ティム

0 投票する
1 に答える
5956 参照

asp.net-mvc-3 - ASP.NET MVC 3 で複数のファイルをアップロードするための ViewModel

次のようにバインディングを使用して複数のファイルをアップロードViewsしています。ViewModel

次のように、許可された拡張子のファイル アップロードを検証するためのデータ アノテーションを含むモデルを表示します。

コントローラー:複数のファイルを保存し、エラーが存在する場合はビューを返す

問題の説明 アップロードされたファイルのファイル拡張子が許可されていないタイプの場合に、それぞれの検証エラーに対して対応するエラーが表示されるように、これら 5 つのファイル アップロード入力コントロールのビュー モデルを定義するにはどうすればよいですか。5 つのファイル アップロード コントロールすべてに対してビュー モデル項目が 1 つしかありません。

ユーザーが許可されていない拡張子のファイルをアップロードしようとする代わりに、それぞれの検証エラーを表示するための複数のファイルアップロードコントロールのビューモデルを定義する最良の方法は何ですか?

0 投票する
2 に答える
798 参照

c# - データ注釈を使用してビューモデルの個々のプロパティを検証します

ビューモデルとデータ注釈を使用して複数のファイルのアップロードを構築しようとしています。以下はビューモデルです。

問題: ここでは、個々のプロパティのモデル状態をチェックして、個々の検証エラーのエラーを表示したいと思います。個人をチェックするかどうかはわかりませんが、すべてのビューモデルでModelState.IsValidを使用します。次のアクションがあります。

意見:

0 投票する
2 に答える
120 参照

asp.net-mvc - ビューモデルを使用して生成されたフォーム要素のデフォルト値とフォーマットの制御

以下のようにモデルクラスを使用してフォーム要素を生成しています

このビュー モデルをビュー ページに渡すと、一部の値は既定値として既に存在しますが、それらは無効です。

PatientNin私が使用するように

フォームがレンダリングされる0と、デフォルト値として が取得されますが、これは望ましくありません。このようなデフォルト値を制御するにはどうすればよいですか?

上記の場合、同じことがBookingDateテキストボックスで発生し、1/1/0001 12:00:00 AMどちらがフォーマット外であり、デフォルト値が不要ですか?

このような問題を解決するにはどうすればよいですか?

0 投票する
2 に答える
224 参照

asp.net-mvc - Asp.net MVC3 で表示する値を渡す

Date と Song の 2 つのテーブルがあります。DateId は Song テーブルへの外部キーです。

関数は次のとおりです。

表示する必要があります: Date SongId Titleビューで。しかし、戻りビューは 1 つのパラメーターしか取りません。両方のテーブル データをビューに渡す方法はありますか?