动态mvc4中的网址路由

时间:2016-03-07 07:35:53

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我正在尝试在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 /凭证/创建)

请帮我解决这个问题.....

2 个答案:

答案 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>";