ViewModel 保存数据

Posted

技术标签:

【中文标题】ViewModel 保存数据【英文标题】:ViewModel Saving Data 【发布时间】:2012-04-23 00:09:14 【问题描述】:

我有一个包含文本框和下拉框的 ViewModel,我想将数据保存到 MVC3 中的数据库中。

我通常会这样做:

if (ModelState.IsValid)

    db.Orders.Add(orders);
    db.SaveChanges();
    return RedirectToAction("Index");  

如何保存 ViewModel?

提前致谢

编辑 好的,我得到了这个 ViewModel:

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();



我将如何保存这些数据?一旦 iv 学会了这一点,我就可以将它应用到实际场景中

谢谢

【问题讨论】:

澄清一下,你是说通常你会直接接受你的数据库对象类型的模型,而这次你不是? @AFinkelston 我正在按照本教程进行操作codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3,但我不知道如何使用我以前从未使用过的 ViewModel 保存选定的值,因为我是 MVC3 的新手。跨度> 【参考方案1】:

创建实体模型的实例并设置您从 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。

【讨论】:

【参考方案2】:

我假设你的意思是编辑?您可以将其重新附加为已修改并重新保存..

db.Orders.Attach(orders, true);
db.ObjectStateManager.ChangeObjectState(orders, EntityState.Modified);
db.SaveChanges();

虽然我会强烈建议您拆分数据库对象和视图模型。您也可以使用AutoMapper 来简化来回操作,但将数据库和前端分开。

【讨论】:

以上是关于ViewModel 保存数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 ViewModel 在数据库中保存 MVC 下拉列表项

如何转换 ViewModel 以利用状态保存?

Android jetpack viewModel 屏幕旋转数据如何保存。

Android JetPack组件之ViewModel状态的保存(程序在后台被系统杀死数据也存活)

Android Studio 之 数据存活,返回桌面切换回来,内容还保存着

android---后台杀死进程依然保存数据