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

时间:2016-08-11 15:26:05

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc tag-helpers

我正在尝试在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>

1 个答案:

答案 0 :(得分:0)

如果控制器和动作与现有控制器和动作不匹配,则不会呈现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>
}