如何在@ Url.Action上使用动态路由

时间:2015-02-27 04:58:02

标签: asp.net asp.net-mvc asp.net-mvc-3 razor

我尝试在asp.net mvc视图上创建动态链接,其值来自数据库。 这是我的代码

@foreach (var menu in Model)
    {
        <li>
            <h4><span class="@menu.Glyphicon"></span> @menu.CategoryName</h4>
            <ul>
                @foreach (var mn in menu.LeftMenus)
                {
                    if (mn.RouteValue == null)
                    {
                        <li><a href="@Url.Action(@mn.ActionName, @mn.ControllerName)"><span class="glyphicon glyphicon-tasks"></span> @mn.MenuName</a></li>
                    }
                    else
                    {
                        <li><a href="@Url.Action(@mn.ActionName, @mn.ControllerName, new { @mn.RouteValue })"><span class="glyphicon glyphicon-tasks"></span> @mn.MenuName</a></li>
                    }
                }
            </ul>
        </li>
    }

当我将@RouteValue解析为@ url.Action时,路由值错误并且像

<a href="/Import?RouteValue=workType%20%3D%201">

这是我的模特

public class LeftMenuViewModel
{
    public string CategoryName { get; set; }
    public string Glyphicon { get; set; }
    public List<LeftMenu> LeftMenus { get; set; }
}

public class LeftMenu
{
    public string MenuName { get; set; }
    public string ActionName { get; set; }
    public string ControllerName { get; set; }
    public object RouteValue { get; set; }
}

我如何使用动态路线值?

2 个答案:

答案 0 :(得分:2)

我已经为我的问题找到了合适的答案。

这是我的模特

public class LeftMenuViewModel
{
    public string CategoryName { get; set; }
    public string Glyphicon { get; set; }
    public List<LeftMenu> LeftMenus { get; set; }
}

public class LeftMenu
{
    public string MenuName { get; set; }
    public string ActionName { get; set; }
    public string ControllerName { get; set; }
    public string ParameterName { get; set; }
    public object RouteValue { get; set; }
}

...在此之后,在我看来,我这样写:

RouteValueDictionary routeValue = new RouteValueDictionary();
                        routeValue.Add(@mn.ParameterName,@mn.RouteValue);
<li><a href="@Url.Action(@mn.ActionName, @mn.ControllerName, routeValue)"<span class="glyphicon glyphicon-tasks"></span> @mn.MenuName</a></li>

答案 1 :(得分:0)

尝试使用Route值设置参数名称,如

new { @m.ParameterName = @mn.routeValue }