从db填充下拉列表

时间:2011-01-28 10:36:13

标签: entity-framework-4 asp.net-mvc-3

我的实体框架中有一个带有2个表的mvc 3应用程序。

PurchaseTable,即PurchaseID,PurchaseDate& ProductID我有另一个名为Product的表,其中包含ProductID和ProductName。创建新视图以插入新购买如何将ProductID视图中的文本框更改为Product表中ProductName限定的下拉列表?

2 个答案:

答案 0 :(得分: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 Helper:

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

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

然后,当您提交表单时,模型中的SelectedProductId值将使用下拉列表中的选定值进行填充。

答案 1 :(得分:3)

答案比看起来容易。只需创建一个列表:

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

第一个参数是你的表(实体模型中的“Products”),第二个参数是从列表中选择时返回的“id”(即SelectedValue),第三个参数是“text”,它将是显示在列表中,最后一个参数是当前选定的项目。

假设您的模型名为MyTablesDB,那么:

MyTablesDB db = new MyTablesDB();

例如:

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

干杯,