Оператор Sql select возвращает нулевую ссылку в asp.net - PullRequest
0 голосов
/ 07 ноября 2019

Я просматриваю конкретную категорию товара в представлении. Я хочу, чтобы при нажатии на нее просматривались все товары этой категории, но я получаю исключение нулевой ссылки. У меня есть отдельные таблицы для категории и продуктов.

Вот что я пробовал. Видимый код:

@model IEnumerable<OpabidFarmsLtd.Models.ViewModels.Shop.CategoryVM>

<h3>Categories</h3>

<ul>
<li><a href="#">All</a></li>
@foreach (var item in Model)
{
    <li><a href="/shop/category/@item.Slug.ToLower()">@item.Name</a></li>
}
 </ul>

И мой контроллер (ShopController):

public ActionResult Category(string name)
    {
        // Declare a list of ProductVM
        List<ProductVM> productVMList;


        using (Db db = new Db())
        {
            // Get category id
            CategoryDTO categoryDTO = db.Categories.Where(x => x.Slug == name).FirstOrDefault();
            int catId = categoryDTO.Id;

            // Init the list
            productVMList = db.Procucts.ToArray().Where(x => x.CategoryId == catId).Select(x => new ProductVM(x))
                .ToList();

            // Get category name
            var productCat = db.Procucts.Where(x => x.CategoryId == catId).FirstOrDefault();
            ViewBag.CategoryName = productCat.CategoryName;
        }

        // Return view with list
        return View(productVMList);
    }

Снимок экрана с сообщением об ошибке

Редактировать: В поисках чегонеправильно, я обнаружил, что метод Category никогда не получал параметр вообще, я прокомментировал все коды в нем и сделал следующее:

 public ActionResult Category(string name)
    {
        string cat;
        using (Db db = new Db())
        {
            CategoryDTO dto = db.Categories.Where(x => x.Slug == "test-category").FirstOrDefault();
            cat = dto.Id.ToString();
        }

        return Content(name + cat);
    }

Он вернул только 8, что было идентификатором из базы данных. Я знаю, почему он давал мне ноль, потому что он никогда не получал никаких параметров, а по умолчанию - нольЧто я не могу понять сейчас, так это того, почему параметр не попадает туда из моего кода выше. Пожалуйста, помогите, я новичок в этой структуре.

1 Ответ

0 голосов
/ 07 ноября 2019

Вы пытаетесь отправить "productVMList" для просмотра, но добавляете модель категории VM на html-страницу. Я думаю, что вы должны отправить «categoryVMList» вместо «productVMList», или вы должны добавить productVM к вашему представлению. Как;

@model IEnumerable<OpabidFarmsLtd.Models.ViewModels.Shop.ProductVM>

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

ProductVMList.Add(object)

В противном случае установите точку останова на return View(ProductVMList) и проверьте список пустым или заполненным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...