0

我的控制器中有 Get 动作,它有两个参数。我使用 JS 函数从 Razor 视图中调用它们:

function deleteAddress(addressId) {
    url = '@Url.Action("Delete", "Addresses",new { addressId = "3",actionRouteAfterActionFinish="SelectAddress"})';
    openLink(url);
}

这是我在控制器内的操作声明:

public async Task<ActionResult> Delete(int addressId,string actionRouteAfterActionFinish){
   ...
   ...
}

当我在属性路由下方添加时,它运行良好,并且两个参数都从 Razor 视图正确传递到Delete操作:

[Route("Addresses/Delete/{addressId}/{actionRouteAfterActionFinish}")]

但是当我尝试在下面使用它时RouteConfig它不起作用,并且null当从 Razor 视图调用方法时设置了第二个参数。我想知道如何重写RouteConfig以管理具有两个参数的操作?

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//enabling attribute routing
routes.MapMvcAttributeRoutes();
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Intro", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "TwoParamterAction",
    url: "{controller}/{action}/{parameter1}/{paramter2}"
);

Default用规则重新排序规则,TwoParamterAction但没有帮助。

4

1 回答 1

1

这是因为参数名称不匹配。路由 url 中的参数可以具有与方法参数不同的顺序。

因此,名称必须匹配。

routes.MapRoute(
    name: "TwoParamterAction",
    url: "{controller}/{action}/{addressId}/{actionRouteAfterActionFinish}"
);

这应该有效,因为名称匹配。

于 2020-05-04T07:25:52.130 回答