0

Я пытаюсь динамически создать свою верхнюю панель навигации в ASP.NET MVC ядра 6.Создание динамических ссылок в панели навигации

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

My Model:

public class IP_Category 
{ 
    public int id { get; set; } 
    public string DisplayName { get; set; } 
} 

в мой контроллер:

public IActionResult Index() 
    { 
     //This way I dynamically pass data to my View 
     ViewBag.Categories = _repository.ReturnCategories(); 
     return View(); 
    } 

в моей cshtml странице:

@{ 
    //this info is in the top of the page, here I retrieve data passed from 
    //controller and save it as a local variable 
    var categories = (List<IP_Category>)ViewBag.Categories; 
} 

Тогда позже в _Layout, где я позабочусь о навигации:

<ul class="nav navbar-nav"> 
    <li><a asp-controller="Home" asp-action="Index">Home</a></li> 
    <li><a asp-controller="Home" asp-action="About">About</a></li> 
    <li><a asp-controller="Home" asp-action="Contact">Contact</a></li> 

    @foreach (var category in categories) 
    { 
     <li><a asp-controller="Home" asp-action="@category.DisplayName">@category.DisplayName</a></li> 
    } 
</ul> 

Проблема возникает с asp-action="@category.DisplayName", которая не создает соответствующий href на моей фактической странице.

Итак, вопрос в том, что я делаю неправильно? Как передать category.DisplayName в мой asp-action тег, чтобы ссылки работали правильно?

Edit 1 - Добавление больше кода:

Вот что генерируется (обратите внимание на недостающую HREF тега)

<ul class="nav navbar-nav"> 
    <li><a href="/">Home</a></li> 
    <li><a href="/Home/About">About</a></li> 
    <li><a href="/Home/Contact">Contact</a></li> 

    <li><a href="">Item1</a></li> 
    <li><a href="">Item2</a></li> 
</ul> 
+0

Что это на самом деле генерации? –

+0

Я обновил сообщение –

+1

Я думаю, ваша проблема в http://stackoverflow.com/questions/38797393/asp-controller-and-asp-action-attributes-not-working –

ответ

0

если контроллер и действие не соответствуют существующего контроллера и действия то href не будет отображаться. Я подозреваю, что @ category.DisplayName не соответствует действительному имени действия на вашем домашнем контроллере. Кажется, более вероятно, что вы действие названной категории, которая ожидает параметр, соответствующий @ category.DisplayName поэтому он должен быть передан в качестве параметра маршрута не как имя действия

@foreach (var category in categories) 
{ 
    <li><a asp-controller="Home" 
       asp-action="Category" 
     asp-route-category="@category.DisplayName">@category.DisplayName</a></li> 
} 
+0

Вы были правы! Я не знал, что если фактический 'IActionResult' под моим контроллером существует, тогда он не создаст соответствующий href. Спасибо! –

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