Данные не сохраняются в переменной ModelList в цикле. «Индекс был вне диапазона»

1

Я знаю, что это обычная проблема, но я не мог найти причину.

Модель 1:

public class BsSingleCategoryProductModel
    {
        public BsSingleCategoryProductModel()
        {
            Products = new List<ProductOverviewModel>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public string SeName { get; set; }
        public IList<ProductOverviewModel> Products { get; set; }
    }

Модель 2:

public class BsMultipleCategoryProductModel
    {

        public BsMultipleCategoryProductModel()
        {

            SubCategories = new List<Category>();
            SubCategoriesProduct = new List<BsSingleCategoryProductModel>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public string SeName { get; set; }
        public IList<Category> SubCategories { get; set; }
        public IList<BsSingleCategoryProductModel> SubCategoriesProduct { get; set; }
    }

Вот мой контроллер Utility Meyhod (Not Action):

public string ReturnProductsByCategoryId(int categoryId)
        {


            var subcategories = _categoryService.GetAllCategoriesByParentCategoryId(categoryId, true).ToList();



            if (subcategories.Count > 0)
            {
                var category = _categoryService.GetCategoryById(categoryId);
                var model = new BsMultipleCategoryProductModel();
                model.SubCategories = subcategories;
                model.Id = category.Id;
                model.Name = category.Name;
                model.SeName = category.GetSeName();

                int i = 0;
                foreach (var subcategory in subcategories)
                {
                    model.SubCategoriesProduct[i] = PrepareProductsInCategory(subcategory.Id);
                    i++;
                }


                return RenderPartialViewToString("AllProductsInCategoryWithSubcategory", PrepareProductsInCategory(categoryId));

            }else
            {
                return RenderPartialViewToString("AllProductsInCategory", PrepareProductsInCategory(categoryId));
            }

        }

И вот еще один метод:

public BsSingleCategoryProductModel PrepareProductsInCategory(int categoryId)
        {
            var model = new BsSingleCategoryProductModel();
            var category = _categoryService.GetCategoryById(categoryId);
            var categoryIds = new List<int>();
            categoryIds.Add(categoryId);
            IPagedList<Product> products = new PagedList<Product>(new List<Product>(), 0, 1);
            products = _productService.SearchProducts(categoryIds: categoryIds,
                                                    storeId: _storeContext.CurrentStore.Id,
                                                   visibleIndividuallyOnly: true);


            model.Id = category.Id;
            model.Name = category.Name;
            model.SeName = category.GetSeName();
            model.Products = PrepareProductOverviewModels(products).ToList();

            return model;
        }

В цикле foreach ReturnProductsByCategoryId метода model.SubCategoriesProduct[i] получает эту ошибку.

Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index

Я отлаживал, значения генерируются правильно. Всякий раз, когда значение пытается вставить в model.SubCategoriesProduct[i] он показывает эту ошибку в первый раз цикла. Как это исправить? Есть идеи? Заранее спасибо.

Теги:
asp.net-mvc
nopcommerce

1 ответ

4
Лучший ответ

Эта

SubCategoriesProduct = new List<BsSingleCategoryProductModel>()

создает список из 0 длины. Это означает, что SubCategoriesProduct[i] будет работать для любого i, поскольку он пытается получить доступ к элементу списка без элементов.

Для случая вы можете просто Add вместо этого:

model.SubCategoriesProduct.Add(PrepareProductsInCategory(subcategory.Id));
  • 0
    большое спасибо @Andrei

Ещё вопросы

Сообщество Overcoder
Наверх
Меню