1

テキスト ボックスとドロップダウン ボックスを含む ViewModel があり、データを MVC3 のデータベースに保存したいと考えています。

私は通常、次のようなことをします:

if (ModelState.IsValid)
{
    db.Orders.Add(orders);
    db.SaveChanges();
    return RedirectToAction("Index");  
}

ViewModel を保存するにはどうすればよいですか?

前もって感謝します

編集OKなので、ivはこの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 がこれを学習したら、実際のシナリオに適用できます

ありがとう

4

2 に答える 2

2

エンティティ モデルのインスタンスを作成し、アクション メソッドにポストされた 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"); 

  } 
}

ドメイン オブジェクトから ViewModel へのマッピング用のAutoMapperなどのライブラリを検討することもできます。

于 2012-04-23T00:35:37.443 に答える
0

編集のつもりですか?変更したとおりに再アタッチして、再保存できます。

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

ただし、データベース オブジェクトとビューモデルを分割することを強くお勧めします。また、 AutoMapperを使用して、データベースとフロントエンドを分離したまま、行き来を楽にすることもできます。

于 2012-04-23T00:34:54.463 に答える