代码之家  ›  专栏  ›  技术社区  ›  Jimmy

ASP.NET MVC ActionLinks是否向其中注入当前变量?

  •  1
  • Jimmy  · 技术社区  · 15 年前

    目前我有一个中型MVC项目,它有多个控制器,支持通过分页助手进行分页。

    这个像这样工作

    routes.MapRoute(
                    "TabletsPaged",
                    "Tablet/Page/{page}",
                    new { controller = "Tablet", action = "Index" }
                ); //paging in the tablet controller
    

    在我的主页面,我有一个导航,链接到我的各个控制器的所有索引操作。无论出于什么原因,当我更改任何控制器上的页面时,我的导航链接将变为/controller/page/x,其中x是我正在查看的当前页面,而当在主控制器中时,链接将显示为/controller。你知道为什么会这样吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   user151323    15 年前

    路由引擎获取当前路由(您所在的视图)中占位符变量的值,并自动将这些值添加到该视图中生成的所有链接中,这些链接也包含这些变量。

    您需要在不需要页码的地方显式重置这些变量,也就是说,当您为菜单生成链接时,如下所示:

    ActionLink ("Tablet", "Index", new { page = "" });
    

    关于奇怪链接的问题:看看actionlink签名——你给它输入了错误的参数序列。

    要使用此超负荷,请执行以下操作:

    ActionLink (string linkText, string actionName, object routeValues,
                object htmlAttributes);
    

    作为第三个参数,它期望的是routeValues,而不是接收一个字符串,而第四个参数期望的是htmlattributes,而您要给它路由值。

    使用另一个重载:

    ActionLink (string linkText, string actionName, string controllerName,
                object routeValues, object htmlAttributes);
    

    如果不设置任何HTML属性,只需将其作为第五个参数“空”。

    ActionLink("Patients", "Index", "Patient", new {page = ""}, null)