0

私は最初の MVC アプリケーションに取り組んでいますが、まだすべてを把握しています。

この時点で、ドメイン オブジェクトと同一のビューモデルがあります。私のコントローラーはビューモデルを構築し、それをビューに渡します。ユーザーに主キーや外部キーをまだ表示したくないため、ビューには一部のプロパティのみが表示されます。主キーの場合は、データベースを更新/削除するためにデータが必要です。

ビューでviewmodelプロパティを使用しない限り、viewmodelを返すとデフォルト値(数値型の場合は0、参照型の場合はnull)に設定されているようです。これは正しい動作ですか?

Edit ビューに渡されたビューモデルにすべてのプロパティが含まれていることを確認しました (予想どおり)。

質問 - ビューがレンダリングされると、ビューモデルはどうなりますか? ビューモデルにビューで使用されていないプロパティが含まれている場合、それらの値は消えてしまいますか? たとえば、[編集アクション] リンクをクリックしてコントローラーで編集アクションを起動すると、アクションに渡されるビューモデルには、画面に表示されていない限りプロパティが含まれません。なんで?

ところで、これは ASP.NET MVC 4 RC です。

4

2 に答える 2

6

ビューでviewmodelプロパティを使用しない限り、viewmodelを返すとデフォルト値(数値型の場合は0、参照型の場合はnull)に設定されているようです。これは正しい動作ですか?

はい、コントローラー アクションを呼び出すときは、リクエストでバインドするすべてのプロパティを渡す必要があります。たとえば、html<form>を使用してアクションを呼び出す場合は、入力フィールドを使用する必要があります。隠しフィールドを使用できますが、存在する必要があります。存在しない場合、コントローラーアクションには何も送信されません

質問 - ビューがレンダリングされると、ビューモデルはどうなりますか?

これは範囲外であり、ガベージ コレクションの対象となります。

ビューモデルにビューで使用されていないプロパティが含まれている場合、それらの値は消えてしまいますか?

絶対。ただし、ビュー内でこれらのプロパティを使用しても、それらは消えます。たとえば、ビュー内に値を表示するだけで、入力フィールドを使用してフォームが送信されたときに値をサーバーに送り返さない場合、値も消えてしまいます。

たとえば、[編集アクション] リンクをクリックしてコントローラーで編集アクションを起動すると、アクションに渡されるビューモデルには、画面に表示されていない限りプロパティが含まれません。なんで?

ビューモデルが存在しなくなったためです。それはなくなり、ガベージコレクションが行われました。これが HTTP プロトコルの仕組みです。ステートレスです。リクエスト間で永続化されるものはありません。アクション リンクなどを使用している場合は、POST フォームの値として、またはクエリ文字列パラメーターとして、要求に入力するプロパティを含める必要があります。

ユーザーがビュー内でこれらの値を変更することを想定していない場合は、コントローラー アクションに ID を渡すだけで、この ID を使用してモデルが保存されている場所 (データベースなど) からモデルを取得できます。

于 2012-06-20T15:18:54.567 に答える
0

プロパティがinput HTML elementフォーム内を生成するヘルパーメソッドにあるHTTPost場合は、フォームを送信するとアクションメソッドで使用できるようになります。単にdiv/spanで表示しているだけの場合、プロパティ値は取得されません。これがMVCモデルバインディングの仕組みです。

HttpPOSTこれらのHTMLヘルパーを使用する場合は、アクションの値を期待してください

@Html.TextBoxFor

@Html.DropDownFor

@Html.EditorFor

@Html.HiddenFor

これらを使用する場合は、値を期待しないでください

@Html.DisplayFor
于 2012-06-20T15:20:23.223 に答える