You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将动态QueryString重新加入ASP.NET MVC的ActionLink中?

如何在ActionLink中保留动态QueryString参数?

我懂你现在的需求——生成多语言切换链接时,得把当前请求里的所有动态QueryString参数都带过去,不能只保留controller和action。其实这个问题很好解决,我们只需要把现有路由值和QueryString参数合并成一个完整的路由字典,再传递给ActionLink就可以了。

直接上修改后的代码,每一步我都加了注释方便你理解:

@{ 
    // 先基于当前路由值创建一个可修改的路由字典
    var routeValues = new RouteValueDictionary(this.ViewContext.RouteData.Values);
    
    // 遍历当前请求的所有QueryString参数,把它们逐一添加到路由字典中
    foreach (string key in this.Request.QueryString.Keys)
    {
        if (!string.IsNullOrEmpty(key))
        {
            routeValues[key] = this.Request.QueryString[key];
        }
    }
    
    // 从字典中取出controller和action(保持你原有的写法逻辑)
    var controller = routeValues["controller"] as string; 
    var action = routeValues["action"] as string; 
} 
<ul class="list-inline"> 
    <li>@Resources.Global.Language : </li> 
    <li> 
        @{
            // 复制一份路由字典,避免修改原字典影响另一个语言链接
            var enRouteValues = new RouteValueDictionary(routeValues);
            // 设置英文对应的culture参数
            enRouteValues["culture"] = "en";
        }
        @Html.ActionLink("English", action, controller, enRouteValues, new { rel = "alternate", hreflang = "en" }) 
    </li> 
    <li> 
        @{
            // 同样复制字典,设置中文对应的culture参数
            var zhRouteValues = new RouteValueDictionary(routeValues);
            zhRouteValues["culture"] = "zh";
        }
        @Html.ActionLink("中文", action, controller, zhRouteValues, new { rel = "alternate", hreflang = "zh" }) 
    </li> 
</ul>

方案说明

  • 用RouteValueDictionary包装现有路由值,方便后续添加、修改参数
  • 遍历QueryString的所有键值对,不管有多少个动态参数,都会自动被整合到路由字典里
  • 为每种语言单独复制路由字典,避免修改culture时互相干扰
  • 最终传递给ActionLink的完整字典,会让生成的链接包含所有原QueryString参数+新的culture参数

这样不管你的QueryString是?id=123&filter=active还是其他任意动态组合,生成的语言切换链接都会完整保留这些参数,同时完成语言切换。

内容的提问来源于stack exchange,提问作者Pop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:09