Как добавить элементы в связанный список? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть следующие модели:

class Order
{
    public List<Product> Products { get; set; }
}

class Products
{
    public int Price { get; set; }
}

На своей странице бритвы я хочу просмотреть все товары и добавить их в свой заказ, например:

int i = 0;
foreach (Product p in AllProducts)
{
    <input asp-for="order.Products[i].Price">
    i++;
}

Это прекрасно работает при создании нового заказа (когда список товаров пуст), но когда я пытаюсь отредактировать заказ и, возможно, добавить новые товары или отредактировать существующие, я получаю исключение Index was out of range..Очевидно, потому что в AllProducts товаров больше, чем в списке Products заказа.

Есть ли способ преодолеть это?

Ответы [ 4 ]

0 голосов
/ 04 июня 2019

Попробуйте следующую модификацию на странице редактирования заказа:

 @for (int i = 0; i < Model.Order.Products.Count(); i++)
    {
        <input asp-for="Order.Products[i].Price">
    }
0 голосов
/ 03 июня 2019

Как насчет просто зацикливания после последнего индекса ваших текущих заказов:

int i = order.Products.Count();
foreach (Product p in AllProducts)
{
    <input asp-for="order.Products[i].Price">
    i++;
}
0 голосов
/ 03 июня 2019

При получении заказа из БД на редактирование вам также необходимо получить сопутствующие товары. Вы можете использовать Включить, чтобы получить их. Смотрите здесь для более подробной информации. Как только вы получите продукты, вы можете использовать продукты для перечисления, а также использовать AllProducts, чтобы разрешить добавление продуктов, которых не было в списке

0 голосов
/ 03 июня 2019

Мы можем сделать, обновив код. Я думаю, что проблема решена. Проблема была в цикле foreach.

  int i = 0;
  foreach (Product p in AllProducts)
 {
    <input asp-for="AllProducts[i].Price">
    i++;
  }

Тем не менее, вы столкнулись с проблемой, пожалуйста, поделитесь бритвой.

...