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

ASP.NET MVC:如何配置含两个参数的Action路由?

解决ASP.NET MVC RouteConfig双参数Action传值为null的问题

首先,咱们来拆解下你遇到的问题根源:

  • 路由顺序错误:你定义的TwoParamterAction路由在Default路由之后,而MVC的路由匹配是从上到下依次进行的。当请求Addresses/Delete/3/SelectAddress进来时,会先被Default路由捕获——它只会把3绑定到id参数,后面的SelectAddress会被当作额外的路径片段,根本不会映射到你的第二个参数上。
  • 路由参数名称不匹配+拼写错误:你的自定义路由里用的是parameter1和paramter2(还打错了一个字母!是parameter2不是paramter2),但Action的参数是addressId和actionRouteAfterActionFinish,名称对不上的话,模型绑定根本没法把URL里的值对应到Action参数上。

修改后的RouteConfig配置

把下面的配置替换你原来的路由代码:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// 启用特性路由
routes.MapMvcAttributeRoutes();

// 把双参数路由放在默认路由前面,保证先匹配更具体的规则
routes.MapRoute(
    name: "TwoParameterAction", // 修正拼写错误
    url: "{controller}/{action}/{addressId}/{actionRouteAfterActionFinish}",
    // 这里不需要默认值,因为你的Action两个参数都是必填的
    defaults: new { }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Intro", id = UrlParameter.Optional }
);

关键说明

  1. 路由顺序优先:更具体的路由规则(比如需要两个参数的)一定要放在通用路由(比如默认的单参数可选路由)前面,这样MVC才会先匹配到符合多参数的请求。
  2. 参数名称严格对应:路由URL里的片段名称必须和Action的参数名称完全一致,这样模型绑定才能自动把URL里的addressId和actionRouteAfterActionFinish值映射到Action的同名参数上。
  3. 修正拼写错误:你原来的路由名称TwoParamterAction少了一个e,参数paramter2也少了一个e,这些小错误也会导致路由匹配异常。

修改完成后,你的@Url.Action生成的URL会正确匹配这个双参数路由,两个参数都能被正确传递到Delete Action里了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:27:57