2011-01-28 12 views
3

エンティティフレームワークに2つのテーブルを持つmvc 3アプリケーションがあります。dbからドロップダウンリストにデータを入力

PurchaseTableはPurchaseID、PurchaseDateであった& ProductID ProductIDとProductNameを含むProductという別のテーブルがあります。新しい購入を挿入するための新しいビューを作成するProductIDのビューのテキストボックスをProductテーブルのProductNameにバインドされたドロップダウンに変更するにはどうすればよいですか?

答えて

6

ViewModelに作成します。

public class CreatePurchaseViewModel 
{ 
    public Purchase Purchase { get; set; } 
    public IEnumerable<SelectListItem> Products { get; set; } 
    public int SelectedProductId { get; set; } 
} 

セットアップのViewModelで表示:

[HttpGet] 
public ActionResult CreateProduct() 
{ 
    var model = new CreatePurchaseViewModel 
    { 
     Products = repository.FindAllProducts().Select(x => 
       new SelectListItem 
       { 
        Text = x.ProductName, 
        Value = x.ProductId 
       } 
    }; 

    return View(model); 
} 

そして、単にのViewModelにバインドし、DropDownListFor HTMLヘルパーを使用します。

<! -- other code to bind to Purchase, and then: --> 

<%= Html.DropDownListFor(x => x.SelectedProductId, Model.Products) %> 

フォームを送信すると、モデルのSelectedProductIdの値に、ドロップダウンリストから選択した値が入力されます。

+0

うーん、私はリポジトリを作成する必要があるように....男Iアプリケーションを開発する方がはるかに簡単だと思われるasp.netに戻ることを考えています。 –

+1

いいえ、リポジトリを使用する必要はありません.DBから製品を入手したいものを使用してください。リポジトリはMVCとは関係ありません。 – RPM1984

+0

遅い返信rpmのため申し訳ありません。それは大事に働いているようだ!あなたの助けをありがとう:) –

3

答えは見た目より簡単です。単純にリストを作成します。

myDropDown = new SelectList(db.Products, "Product_ID", "ProductName", idSelected); 

最初のパラメータは、あなたのテーブル(エンティティモデルから「製品」)で、第二は、リストから選択するときに返される「ID」(すなわちSelectedValueの)で、 3番目はリストに表示される "テキスト"で、最後のパラメータは現在選択されている項目です。

と仮定すると、あなたのモデルは、その後、MyTablesDBと呼ばれている:例えば

MyTablesDB db = new MyTablesDB(); 

public SelectList GetPullDown(object idSelected) { 
    myTablesDB myDB = new MyTablesDB(); 
    return new SelectList(myDB.Products, "Product_ID", "Product_Name", idSelected); 
} 

乾杯、

+0

私は列jQuery DataTableにドロップダウンリストを追加できるソリューションを探していますが、私のプログラムで使用できる答えに似た解決策がありますか? – Jay113

関連する問題