在导航面板中创建动态链接

Create dynamic links in the navigation panel

我正在尝试在 ASP.NET Core MVC 6 中动态创建我的顶部导航面板。

我知道这很简单,但我不知道如何让它发挥作用。这是我所做的(简化):

我的模型:

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 标签以便链接正常工作?

编辑 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>

如果控制器和动作与现有控制器和动作不匹配,则不会呈现任何 href。我怀疑 @category.DisplayName 与您的家庭控制器上的任何实际操作名称都不匹配。似乎更有可能你有一个名为 Category 的动作,它需要一个对应于 @category.DisplayName 的参数,所以它应该作为路由参数传递,而不是作为动作名称

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