2011-01-28 115 views
3

我在我的實體框架中有一個mvc 3應用程序和2個表。從db填充下拉列表

purchaseID爲PurchaseID,PurchaseDate & ProductID我有另一個名爲Product的表,其中包含ProductID和ProductName。創建一個插入新購買的新視圖如何將ProductID中的文本框更改爲產品表中ProductName的下拉框?

回答

6

創建一個視圖模型:

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

設置視圖與視圖模型:

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

    return View(model); 
} 

然後,只需綁定到視圖模型,並使用DropDownListFor HTML助手:

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

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

然後,當您提交表單時,模型中的SelectedProductId值將使用下拉列表中的選定值填充。

+0

嗯,所以我需要創建一個存儲庫來....我的人我正在考慮回到asp.net,因爲它似乎更容易開發應用程序 – 2011-01-28 11:24:17

+1

不,您不必使用存儲庫 - 使用任何你想從數據庫獲取產品的東西。版本庫與MVC無關。 – RPM1984 2011-01-28 11:49:17

3

答案比看起來容易。只需創建一個列表:

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

第一個參數是你的表(從實體模型「產品」),第二個是「ID」,從列表(即的SelectedValue)選擇時將返回時,第三是將顯示在列表中的「文本」,最後一個參數是當前選擇的項目。

假設你的模式被稱爲MyTablesDB,則:

MyTablesDB db = new MyTablesDB(); 

例如:

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

乾杯,