ASP.NET MVCアプリケーションでは、コントローラーアクションごとに異なるViewModelがありますか、それともすべてのアクションに対して共有されていますか。
たとえば、ListアクションとCreateアクションを備えたUsersコントローラーがある場合、UserViewModelが必要ですか、それともCreateUserViewModelとListUsersViewModelが必要ですか?
ASP.NET MVCアプリケーションでは、コントローラーアクションごとに異なるViewModelがありますか、それともすべてのアクションに対して共有されていますか。
たとえば、ListアクションとCreateアクションを備えたUsersコントローラーがある場合、UserViewModelが必要ですか、それともCreateUserViewModelとListUsersViewModelが必要ですか?
それらがほぼ同じプロパティになる場合は、共有しても問題ありません。そうでない場合は、2を作成します。私は通常、正直に言うと共有することになります。
すべてのユーザーの一覧表示とユーザーの作成/編集は別のものなので、おそらく 2 つの異なるビューが必要になるでしょう。ただし、作成ユーザーと編集ユーザーの間で編集モデル/ビューを作成して共有することはできます。
ビューに必要な情報によって異なります。まったく同じ情報を使用する場合、ViewModel を共有しても問題ありません。それらの 1 つが別の情報と同じ情報をすべて持っている場合、次のように一方を他方から継承させることができます。
public class ListViewModel
{
public string Username { get; set; }
public string Email { get; set; }
}
public class CreateViewModel : ListViewModel
{
public bool AcceptedTOA { get; set; }
}
このようなものを使用すると、作成ビューで 3 つの値すべてにアクセスできますが、リスト ビューでのみアクセスできUsername
ますEmail
。
編集:さらにオプションを追加しています...
継承する代わりに、それらを互いの内部に配置することもできます。
public class CreateViewModel
{
public ListViewModel ListViewModel { get; set; }
public bool AcceptedTOA { get; set; }
}
..そして、ビューで次のように消費します...
@Model.ListViewModel.Username