[英]Make ASP.NET MVC treat a route parameter named ``id'' like any other parameter
我有一个用于创建实体的MVC页面。 完成后,我想重定向到父实体。 我这样做是这样的:
return RedirectToAction("Edit", new { id = vm.Parent });
当我使用任何其他参数名称时,它将被解释为URL参数:
return RedirectToAction("Edit", new { foo = vm.Parent });
呈现为/Entities/Edit?foo=234
但是ASP MVC在特殊情况下会选择名为id
的路由参数,URL看起来像: /Entities/Edit/234
。 这对我来说不起作用,因为没有为此设置路由。 我正在寻找类似/Entities/Edit?id=234
的URL。
我如何强制它以这种方式工作? 路线设定:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
从外观UrlParameter
,您仅使用默认的路由配置路由,该路由仅将id
指定为已定义的UrlParameter
。 如果需要自定义参数,则需要按以下方式定义它:
routes.MapRoute(
name: "ControllerName",
url: "controllername/edit/{foo}"
);
或者,如果您希望全局使用foo
而不是id
,则只需更改现有路由即可:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{foo}",
defaults: new { controller = "Home", action = "Index", foo = UrlParameter.Optional }
);
或者,如果您不希望URL带有不必要的查询字符串参数,请更改默认值:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.