2017-01-04 1 views
0

Предположим, у меня есть две таблицы. Инвентарь и Поставщик. Inventory имеет три поля: имя, inventory_no и Номер поставщика и Поставщик имеет два поля: имя, Номер поставщикаasp.net mvc - заполнить выпадающий список из отдельной модели/таблицы базы данных

На мой взгляд, для инвентаризации можно ли добавить ячейку с @Html.DropDownListFor() заселенной из отдельный Поставка модель?

Я не могу понять, как выполнить это с помощью контроллера/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); 
    } 
} 
+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> 
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(); 
      } 
    } 
} 
0

Вам не нужно использовать AJAX для этого, просто изменить модель вы проходящее в поле зрения. Модель будет List<Item> и Item будет определяться как:

string Name 
int Inv_No 
IEnumerable<SelectListItem> Suppliers 

Таким образом, каждый элемент имеет свой собственный список поставщиков, и вы можете использовать DropDownFor для создания раскрывающегося списка для каждого элемента из поля Поставщиков.

Смежные вопросы