asp.net mvc - 从单独的模型/数据库表中填充下拉列表

时间:2017-01-04 20:44:45

标签: c# asp.net-mvc asp.net-mvc-4

假设我有两张桌子。 广告资源供应商。广告资源有三个字段:名称 inventory_no supplier_no ,供应商有两个字段:名称 supplier_no

在我的库存视图中,是否可以添加从单独的耗材模型中填充@Html.DropDownListFor()的单元格?

我无法弄清楚如何使用Controller / View完成它,所以我在考虑使用AJAX

示例:

Name    | Inv_no | Suppliers
------- | ------ | ------------------------------
Pen     | 101    | DDL populated of all suppliers
Pencil  | 102    | DDL populated of all suppliers
Erase   | 103    | DDL populated of all suppliers

查看:

<table>
    <tr>
        <th>Name</th>
        <th>Inventory_No</th>
        <th>Suppliers</th>
    <tr>
        @foreach(var item in Model)
        {
            <td>@Html.DisplayFor(modemItem => item.name)</td>
            <td>@Html.DisplayFor(modemItem => item.inventory_no)</td>
            <td><!-- @Html.DropDownListFor() ? --></td>
        }
</table>

控制器:

public virtual JsonResult  getListOfSuppliers(int? supplier_no)
{
    using (db)
    {
        var vendors = db.vendors.Select(c => new
        {
            Value = c.supplier_no,
            Text = c.name
        });
        return Json(vendors, JsonRequestBehavior.AllowGet);
    }
}

3 个答案:

答案 0 :(得分:1)

是的,这是可能的。

您的模型应该像:

    public class ViewModel
    {
        public string Name { get; set; }
        public int InventoryNo { get; set; }
        public int SupplierNo { get; set; }
        public IList<SelectListItem> Suppliers {get;set;}    
    }

控制器:

public virtual ActionResult  getListOfSuppliers(int? supplier_no)
{
    using (db)
    {
        var model = new ViewModel
        {
           Name = <name value>,
           InventoryNo = <name value>,
           Suppliers = db.vendors.Select(c => new SelectListItem
           {
              Value = c.supplier_no,
              Text = c.name
           }).ToList()
        };
        return View(model);
    }
}

在视图中:

<td><!-- @Html.DropDownListFor(x => x.SupplierNo, Model.Suppliers, new { @class = "form-control" }) ? --></td>

答案 1 :(得分:0)

不是。

最简单的方法是创建一个viewmodel,然后在视图中使用该模型。 viewmodel类将由控制器生成,然后传递给视图。在此视图模型对象中,将是库存项目以及供应对象的IEnumerable列表。

这样的效果会让球滚动:

public class InventoryViewModel
{
    public string Name { get; set; }
    public int Inventory_No { get; set; }
    public int Supplier_No { get; set; }

    public List<Supplies>
    {
        get
            {
                 return <your DAL>.Supplies.All().ToList();
            }
    }
}

答案 2 :(得分:0)

您不需要使用AJAX,只需更改传入视图的模型即可。模型为List<Item>Item定义为:

string Name
int Inv_No
IEnumerable<SelectListItem> Suppliers

这样,每个项目都有自己的供应商列表,您可以使用DropDownFor为Suppliers字段中的每个项目创建下拉列表。