在导航面板中创建动态链接
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>
}
我正在尝试在 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>
}