Передать нулевой параметр контроллеру с помощью ActionLink


У меня есть представление, которое перечисляет кучу категорий:

<ul>
    <li>@Html.ActionLink("All", "Index", "Products")</li>
    @foreach (var item in Model.ProductCategories)
    {
        <li>@Html.ActionLink(item.Name, "Index", new { id = item.Id }, null)</li>
    }
</ul>

Как показано, я должен получить список ссылок на категории, верхний из которых - "все", а следующие-соответствующее название категории, с идентификатором, переданным контроллеру.

Мой контроллер выглядит так:

public ActionResult Index(int? id)
{
    var categories = _productCategoryRepository.GetAll().OrderByDescending(f => f.Name);
    var items = id == null
        ? _productItemRepository.GetAll().OrderBy(f => f.Name).ToList()
        : _productCategoryRepository.GetSingle((int)id).ProductItems.OrderBy(f => f.Name).ToList();

    var model = new ProductsViewModel()
                    {
                        ProductCategories = categories,
                        ProductItems = items
                    };

    return View(model);
}
Таким образом, категории всегда должны быть одинаковыми. Но элементы должны показывать каждый элемент, когда id равен null и элементы определенной категории, Когда id равен набор.

Это все работает абсолютно отлично, поэтому, когда я нажимаю ссылку категории. Я добираюсь до url следующим образом:

/Продукты / Индекс/3

Отлично! Теперь я нажимаю ссылку "все", но она направляет меня к /Products/Index/3, хотя я явно не передаю ей параметр. Я попытался передать нулевое значение:

@Html.ActionLink("Alle", "Index", "Products", new { id = null })

Но затем я получаю ошибку: не может присвоить 'null' свойству анонимного типа.

Как заставить null быть переданным в мой индекс контролер?

1 4

1 ответ:

Ваше действие контроллера будет достаточно счастливым, чтобы принять nullable int, поэтому дайте ему nullable int Вот так!

@Html.ActionLink("Alle", "Index", "Products", new { id = (int?)null })