【问题标题】:url routing in mvc4 dynamicallymvc4中的url路由动态
【发布时间】:2016-06-20 16:33:57
【问题描述】:

我正在尝试在 MVC 中解析 url,但它给了我一个意想不到的 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>";
                    }
                }

并且尊重的菜单路由是在数据库中定义的。 假设如果我点击了动态菜单中的任何菜单,它总是会在链接中考虑“仪表板”

例如。假设我点击“Create Voucher”链接,它看起来像 (/localhost:6782/Dashboard/Voucher/Create) 而不是 (/localhost:6782/Voucher/Create)

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

【问题讨论】:

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


    【解决方案1】:

    按照 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>";
    

    【讨论】:

    • 但在我的情况下它不起作用,它会跳过项目根目录。它只显示动作名称,控制器名称
    【解决方案2】:

    使用两个属性代替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>
                    }
                }
    

    【讨论】:

  • 抱歉,为什么要在 cshtml 中构建一个包含htmlstring?你可以直接把html放在那里。让我编辑我的帖子...
  • 无论如何,现在,你可以使用这个:strMenu = strMenu + "&lt;li&gt; &lt;a href="@Url.Action(subitem.vUrlAction,subitem.vUrlController)"&gt;&lt;/a&gt;";
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签