2012-04-17 10 views
1

私は質問モデルを表示し、データベースに情報を追加しています。ビューモデルを使用しているときのデータベースの更新

のは、私はこの2つのクラスがあるとしましょう:

public class Ad { 
public int Id { get; set; } 
public int CategoryId { get; set; } 
public string Headline { get; set; } 
public string Text { get; set; } 
public int Type { get; set; } 

public Category Category { get; set; } 
} 

public class Category { 
public int CategoryId { get; set; } 
public int CategoryName { get; set; } 

public IColletion<Ad> Ads { get; set; } 
} 

Context class: 
public DbSet<Ad> Ads { get; set; } 
public DbSet<Category> Categories { get; set; } 

モデルが本当にsimpifiedを超えているが、私はちょうどコンテキストの把握を取得したいです。私は、データベースにエントリを追加すると仮定ビューのビューモデルを作成したいと言うことができます。ビューモデルから「広告」データベーステーブルに情報を追加するにはどうすればいいですか? (私はドロップダウンをレンダリングするためにビューモデルを必要とするが)

namespace Website.Models 
{ 
public class CreateViewModel 
{ 
    public Ad Ad { get; set; } 
    public ICollection<Categories> Categories { get; set; } 
    public Dictionary<int, string> AdTypes { get; set; } 

    public CreateViewModel() 
    { 
     // to populate a dropdown on the "Create" page 
     this.Adtypes= new Dictionary<int, string> 
           { 
            {1, "For sale"}, 
            {2, "Want to buy"}, 
            {3, "Want to trade"}, 
            {4, "Have to offer"} 
           }; 
    } 
} 
} 

デシベルに追加するとき、私は本当に必要な唯一のものは、広告のクラスのパラメータです:ビューモデルのようなものに見えると言うことができます。しかし、どのように私はCreateViewModelからdbに追加するためにこれを抽出するのですか?

これは、現時点では私のコードです:

[HttpPost] 
    public ActionResult Create(Ad ad) 
    { 

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

     return View(ad); 

これは広告のクラスを期待しているので、どのように私は、ビューモデルからのみ広告PARAMATERSを抽出し、DBにそれを挿入します。 申し訳ありませんが、非常に長い投稿とおそらく深刻な初心者のものです。私はちょうどそれをより良く説明する方法を知らなかった。

誰かがビューモデルについて説明したり、私にそのようなサイトを案内したりすることができれば幸いです。

/メートル

答えて

6

あなたがドロップダウンの値のようなウェブサイト上でより多くのデータを必要とするときは、のviewmodelsを使用することができます。それで、あなたは車を作りたいと言うことができます。

Carオブジェクト(Car.cs)

public class Car 
{ 
    public int Id {get;set;} 
    public string Color {get;set;} 
    public string Name {get;set;} 
} 

しかし、あなたはテキストボックスに自分で色を入力する必要はありません。ドロップダウンから色を選択したいとしましょう。もしそうなら、何らかのリスト(SelectList)の色をドロップダウンに追加する必要があります。

ビューモデルは、(CreateCarViewModel.cs)

public CreateCarViewModel 
{ 
    public Car Car {get;set;} 
    public SelectList Colors{ get; set; } //List of colors for dropdown 
} 

コントローラ

ActionResult CreateCar() 
{ 
    CreateCarViewModel CCVM = new CreateCarViewModel(); 
    List<string> colors = new List<string>{"Black","White"}; 
    CCVM.Colors = new SelectList(colors); 

    //Your view is expecting CreateCarViewModel object so you have to pass it 
    return View(CCVM); 
} 

CreateCar(CreateCar.cshtml)

@model YourSolutionName.ModelsFolder.CreateCarViewModel 

//form etc. 
{ 
    @Html.DropDownListFor(x => x.Car.Color, Model.Colors) 
    @Html.TextBoxFor(x => x.Car.Name) 
} 

コントローラ再び

このような状況で有用です3210
+0

マリウス:素晴らしい説明のためにありがとう。私はこれらの方向でちょっと考えていましたが、私はそれを働かせることはできませんでした。これは確かに私を助ける! –

+0

私は助けることができてうれしいです。 – Mariusz

関連する問題