ViewModel保存数据
问题描述:
我有一个ViewModel包含一个文本框和下拉框,我想将数据保存到MVC3中的数据库。ViewModel保存数据
我通常做财产以后这样的:
if (ModelState.IsValid)
{
db.Orders.Add(orders);
db.SaveChanges();
return RedirectToAction("Index");
}
我怎么会做这种用于保存视图模型?
由于提前
编辑 好了,所以IV得到这个视图模型:
namespace DropDownList.Models
{
public class CreditCardModel
{
public List<SelectListItem> CardTypeOptions { get; set; }
[Display(Name = "Card Type")]
public string CardTypeID { get; set; }
[Display(Name = "Card Number")]
[Required(ErrorMessage = "Please provide your card number")]
public string CardNumber { get; set; }
}
}
and this controller:
namespace DropDownList.Controllers
{
public class CreditCardModelController : Controller
{
//
// GET: /CreditCardModel/
public ActionResult Index()
{
var model = new CreditCardModel();
// Populate the dropdown options
model.CardTypeOptions = GetCardTypes("MS"); // Set the default to American Express
return View(model);
}
[HttpPost]
public ActionResult Index(CreditCardModel model)
{
if (ModelState.IsValid)
{
return RedirectToAction("addcardcomplete");
}
// TODO - Handle the form submit
// Populate the dropdown options
model.CardTypeOptions = GetCardTypes("MS"); // Set the default to American Express
return View(model);
}
// TODO - AddCardComplete goes here
// TODO - GetCardTypes goes here
private List<SelectListItem> GetCardTypes(string defaultValue)
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "American Express", Value = "AE", Selected = (defaultValue == "AE") });
items.Add(new SelectListItem { Text = "Mastercard", Value = "MS", Selected = (defaultValue == "MS") });
items.Add(new SelectListItem { Text = "Visa", Value = "VS", Selected = (defaultValue == "VS") });
return items;
}
public ActionResult AddCardComplete()
{
return View();
}
}
}
我将如何保存这些数据?四,一旦得知这个话,我可以把它应用到实际场景
感谢
答
我假定你的意思编辑?虽然我会说你打破强烈提醒除了数据库对象的ViewModels您可以重新连接它修改并重新保存它..
db.Orders.Attach(orders, true);
db.ObjectStateManager.ChangeObjectState(orders, EntityState.Modified);
db.SaveChanges();
。您也可以使用AutoMapper来回移动,使数据库和前端分离。
答
创建实体模型的实例,并设置您从ViewModel中读取的值的值,该值将发布到操作方法并用于保存到数据库。有些事情是这样的。
[HttpPost]
public ActionResult SaveOrder(OrderViewModel orderVM)
{
if(ModelState.IsValid)
{
YourDomainEntity objDomainModel=new YourDomainEntity();
objDomainModel.ItemId=orderVm.ItemId;
objDomainModel.Quantity=orderVM.Quantity;
//Set Other relevant properties also
db.Orders.Add(orders);
db.SaveChanges();
return RedirectToAction("Index");
}
}
您可能会考虑像AutoMapper这样的库,用于从您的域对象映射到您的ViewModel。
只是为了澄清,你是说通常你会直接接受你的数据库对象类型的模型,这次你不是? – DMulligan 2012-04-23 00:27:42
@ AFinkelston即将做的事是按照这个教程http://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/但我不知道如何保存seleced值,因为它使用ViewModel,我从来没有用过,因为我是MVC3的新手。 – user1302054 2012-04-23 00:33:08