2013-07-23 3 views
2

У меня есть Index View с таблицей, заполненной данными из свойства List, но при отправке формы с помощью таблицы свойство равно null.MVC Отправить список объектов

Вот Модель:

public class BillViewModel 
{ 

    public List<Product> ListProducts { get; set; } 

} 

Вот вид продукта:

public class Product 
{ 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
    public decimal Price { get; set; } 
} 

Вот это Вид:

@using (Html.BeginForm()) 
{ 

<input type="submit" value="Aceptar"/> 


<table id="tabla"> 


    @foreach (var item in Model.ListProducts) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.ProductName) 
      </td> 
     </tr> 
    } 

</table> 
} 

можно добавлять или удалять продукты, но как могу ли я получить список продуктов в контроллере ?:

[HttpPost] 
    public ActionResult Index(BillViewModel billViewModel) 
    { 


     return View(); 
    } 
+2

Пожалуйста, просмотрите этот ответ: http://stackoverflow.com/questions/ 17450772/asp-net-mvc4-dynamic-form-generation/17451048 # 17451048 Это та же проблема, я уверен, что она решит вашу проблему. –

+0

Да, вы можете получить все детали под вашим контролем. Поток Mvc - это то, что контроллер взаимодействует как с модальным, так и с представлением. –

ответ

4

Это довольно легко, все, что вам нужно сделать, это место все свойства элемента в форме, так что-то вроде:

<input type="submit" value="Aceptar"/> 
<table id="tabla"> 
    @for (int i = 0; i < Model.ListProducts.Count; i++) 
    { 
     <tr> 
      <td> 
       @Html.HiddenFor(x => x.ListProducts[i].ProductId) 
       @Html.HiddenFor(x => x.ListProducts[i].Price) 
       @Html.DisplayFor(x => x.ListProducts[i].ProductName) 
      </td> 
     </tr> 
    } 
</table> 
+1

Да, я использую for for foreach, указав индекс в список для каждого свойства. Все используют HiddenFor. И это работает. –

+0

@DiegoUnanue Glad It is :) Не стесняйтесь отмечать это как ответ, если это то, что вы ищете :) Удачи. Cheers –

+0

Что произойдет, если я добавлю новую строку, например, у меня есть текстовое поле, где я могу добавить новый продукт, этот продукт не находится в базе данных, поэтому он имеет id. Что такое arquitectural aprouch, я могу использовать для отправки всех продуктов и вставки в базу данных тех, которые в ней нет. У него есть ProductId и ProductName, я могу найти те имена, которых нет в базе данных. Но если я могу повторить имена продуктов? –

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