【问题标题】:Populate a dropdown list from db从 db 填充下拉列表
【发布时间】:2011-01-28 10:36:13
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    创建一个 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 值将填充为从下拉列表中选择的值。

    【讨论】:

    • 嗯,所以我需要创建一个存储库来......我正在考虑回到 asp.net,因为开发应用程序似乎要容易得多
    • 不,您不必使用存储库 - 使用任何您想从数据库中获取产品的东西。 Repository 与 MVC 无关。
    • 抱歉 rpm 回复晚了。这似乎是一种享受!感谢您的帮助:)
    • @DiverDan 你没有关闭你的new SelectListItem{})。
    【解决方案2】:

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

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

    第一个参数是您的表(实体模型中的“Products”),第二个是从列表中选择时将返回的“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);
    }
    

    干杯,

    【讨论】:

    • 我正在寻找一种解决方案,可以将下拉列表添加到 jQuery DataTable 列中,是否有与您的答案类似的解决方案可以在我的程序中使用?
    猜你喜欢
    • 2022-01-11
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多