我正在尝试在MVC中解析url,但它给了我一个意外的网址 假设成功登录到用户看到的仪表板(http://localhost:6782/Dashboard/Index)。我在系统中创建了动态菜单,将在_Layout.cshtml上加载。其代码如下
foreach (PROC_GET_MENU_BY_USER_Result subItem in subMenu)
{
if (subMenu.IndexOf(subItem) == 0)
{
strMenu = strMenu + "<li class ='haschildren'> <a href='#'>" + subItem.vDescription + "<span class='arrow'></span></a>";
strMenu = strMenu + "<ul class='submenu' style='z-index: 1;'>";
}
strMenu = strMenu + "<li><a href='" + subItem.vUrl + "'>" + subItem.vDescription + " </a>";
if (subMenu.IndexOf(subItem) == subMenu.Count - 1)
{
strMenu = strMenu + "</ul> ";
strMenu = strMenu + "</li>";
}
}
在数据库中定义了受尊重的菜单路由。 假设我单击动态菜单中的任何一个菜单,它总是会考虑&#34;仪表板&#34;在链接
例如。假设我点击&#34; 创建凭证&#34;链接看起来像(/ localhost:6782 / Dashboard / Voucher / Create)而不是(/ localhost:6782 /凭证/创建)
请帮我解决这个问题.....
答案 0 :(得分:0)
而不是subItem.vUrl
使用两个属性:
subItem.vUrlControlelr
subItem.vUrlAction
并将URL生成为:
@Url.Action(subItem.vUrlAction,subItem.vUrlControlelr)
这应该可以解决问题。
修改:1 强>
@foreach (PROC_GET_MENU_BY_USER_Result subItem in subMenu)
{
if (subMenu.IndexOf(subItem) == 0)
{
<li class ='haschildren'> <a href='#'>@subItem.vDescription<span class='arrow'></span></a>
<ul class='submenu' style='z-index: 1;'>
}
<li><a href='@Url.Action(subItem.vUrlAction,subItem.vUrlControlelr)'>@subItem.vDescription</a>
@if (subMenu.IndexOf(subItem) == subMenu.Count - 1)
{
</ul>
</li>
}
}
答案 1 :(得分:0)
根据建议 SamGhatak ,您应该在Db中使用两个属性。
但是,如果您不想更改Db
,请在URl之前附加/
。它会解决你的问题。
strMenu = strMenu + "<li><a href='/" + subItem.vUrl + "'>" + subItem.vDescription + " </a>";
如果您创建了两个列,那么它应该是这样的
strMenu = strMenu + "<li> <a href="@Url.Action(subitem.vurlaction,subitem.vurlcontroller)"></a>";