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