はのは、私は、ユーザーの詳細情報の編集を可能にするページを持っているので、私はこのようにViewModelにあるとしましょう:ASP.NET MVC - どのように正確に使用するビューモデル
public class UserViewModel {
public string Username { get; set; }
public string Password { get; set; }
public int ManagerId { get; set; }
public string Category { get; set; }
}
だから私のEditUser作用に対するIこれは、モデルバインダーによって戻されていることができ、その後、私はドメインモデルにそれをマッピングすることができます
public ActionResult EditUser(UserViewModel user) {
...
しかし、フォームを表示するページでも、このようなためにドロップダウンを提供するために、管理者とカテゴリのリストなどの詳細を必要としますそれらのフィールド。サイドバーに他のユーザーのリストも表示されるので、編集中の異なるユーザーを切り替えることができます。
public class ViewUserViewModel {
public UserViewModel EditingUser { get; set; }
public IEnumerable<SelectListItem> Managers { get; set; }
public IEnumerable<SelectListItem> Categories { get; set; }
public IEnumerable<SelectListItem> AllUsers { get; set; }
}
これはそれを行うための正しい方法です:
だから、私は別のビューモデルを持っていますか?彼らはどちらもビューモデルですか?その場合は、モデルのようなVMとそのページのデータだけを含むVMを区別できるように、使用する命名規則はありますか?
これは間違っていますか?
この件に関する解説あなたはブログに入れてください! +1 –
あなたは、モデルがアプリケーションのビジネスロジックを担当する必要があると述べました。ビジネスでは、おそらくすべてのデータの準備、クエリ、フィルタリング、あるモデルから別のモデルへの投影、または特定のViewModelを意味します。そして、そのように準備されたViewModelは、コントローラによってViewに渡されます。どのように物理的にそれを行うのですか?あなたはビジネスを行うためにどのようにモデルをデザインしていますか?たとえば、すべてのコントローラメソッドをビューモデルを表すクラスに移動しますか?現在、私は多くの機能とすべてのビットとボルトを行うコントローラの "ビジネス"を持っています。ありがとう – Celdor
正直なところ、あなたは本当にASP.NET MVCでそれを行うことはできません。私が話していることを本当に理解するには、Ruby on Railsでサンプルアプリケーションを構築してください。 RoRは非常に厳密にMVCパターンに従っており、モデルにどのくらいのものが入っているのか正確に分かります。一方、ASP.NET MVCは、MVCにゆるやかにしか準拠していません。 「モデル」は、エンティティクラス、ビューモデル、リポジトリやサービスなどの何らかの組み合わせです。コントローラを薄くしておかなければなりません。すべてのロジックを1つのクラスに移動することはできません。 –