2012-04-23 19 views
1

私は、テキストボックスとドロップダウンボックスを含むViewModelを持っており、データをMVC3のデータベースに保存したいと思います。ViewModelデータを保存する

私は通常、気にいらないように実行します。

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

どのように私はViewModelにの保存のためにこれを行うだろうか?

アドバンス

おかげでIVは、このビューモデルを得たので、[OK]を EDIT:

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は、このことを学んだ後は、私はあなたが編集を意味すると仮定し、実際のシナリオ

おかげ

+0

通常、データベースオブジェクトタイプのモデルを直接受け入れると言っていますが、今回はそうではありませんか? – DMulligan

+0

@ AFinkelston私は何をしているのは、このチュートリアルhttp://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/に従っていますが、私はどのように使用して選択値を保存するか分からない私がMVC3を初めて使用しているときに私がかつて使ったことのないViewModel。 – user1302054

答えて

0

にそれを適用することができますか?あなたは、再接続することができ、それを修正し、再度保存それとして...

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

私はあなたがデータベース・オブジェクトとのviewmodelsをばらばらに強くアドバイスをでしょうけど。また、AutoMapperを使用して前後に行くことを楽にしながら、データベースとフロントエンドを分離した状態に保つことができます。

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のようなライブラリを考えることができます。