私はMVC5を初めて使い、ViewModelsの使用を把握しようとしています。私の質問は、自分のViewModelのコントローラーでモデルクラスをインスタンス化する必要があるかどうかです。私は、請求書を整理するためのデータベースを作成しており、データベーステーブルにマップするCashモデルと、データを表示/編集するCashViewModelを持っています。ここでMVC5のViewModelでModelクラスをインスタンス化する必要はありますか?
は私のモデルである:ここでは
public class Cash
{
public int CashId { get; set; }
public decimal CashAmount { get; set; }
public int CashTypeId { get; set; }
public DateTime DateModified { get; set; }
public CashType CashType { get; set; }
}
は私のViewModelである:ここでは
public class CashViewModel
{
public int CashId { get; set; }
public decimal CashAmount { get; set; }
public int CashTypeId { get; set; }
public SelectList CashTypeSelectList { get; set; }
}
は私のコントローラです:
public ActionResult Create([Bind(Include = "CashAmount,CashTypeId")] CashViewModel cashVM)
{
if (ModelState.IsValid)
{
var cash = db.Cashes.Create();
cash.DateModified = DateTime.Now;
cash.CashAmount = cashVM.CashAmount;
cash.CashTypeId = cashVM.CashTypeId;
db.Cashes.Add(cash);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.CashTypeId = new SelectList(db.CashTypes, "CashTypeId", "CashTypeName", cashVM.CashTypeId);
return View(cashVM);
}
私は現金モデルのインスタンスを作成していますViewModelクラスをモデルクラスにマッピングします。これは正しいです? 1つのViewModelに複数の属性を持つ複数のモデルがあるプロジェクトを開始すると、すぐに手を抜けてしまうようです。
私が読んだすべての質問と記事は、あまりにもあいまいであるか、あまりにも細かすぎて、特定の質問には何も見つかりません。
あなたの何が正しいか。 [MVCのViewModelとは何ですか?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)を参照してください。しかし、 'ViewBag.CashTypeId = new SelectList(....)'を取り除き、 'cashVM.CashType = new SelectList(db.CashTypes、" CashTypeId "、" CashTypeName ");'(これは第4パラメータには注意してください) - ビュー内に '@Html.DropDownListFor(m => m.CashTypeId、Model.CashType、...) 'とする必要があります。 –