Я новичок в MVC5 и просто пытаюсь понять использование ViewModels. Мои вопросы: если мне нужно создать экземпляр класса модели в контроллере моей модели ViewModel. Я создаю базу данных для организации счетов и имею модель Cash, которая сопоставляется с таблицей базы данных, и CashViewModel для просмотра/редактирования данных.Нужно ли создавать экземпляр класса Model в ViewModel в MVC5?
Вот моя модель:
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 с моим классом модели. Это верно? Когда я начинаю делать проекты, в которых есть несколько моделей с несколькими атрибутами в одной ViewModel, кажется, что он быстро выйдет из-под контроля.
Все вопросы и статьи, которые я читаю, либо слишком расплывчаты, либо слишком детализированы, и я не могу найти что-либо по моему конкретному вопросу, извините, если что-то уже есть.
Что вы делаете правильно. См. [Что такое ViewModel в MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc). Однако удалите свой 'ViewBag.CashTypeId = новый SelectList (....)' и замените его на 'cashVM.CashType = new SelectList (db.CashTypes," CashTypeId "," CashTypeName ");' (обратите внимание на 4-й параметр) - в представлении должно быть '@ Html.DropDownListFor (m => m.CashTypeId, Model.CashType, ...)' –