繁体   English   中英

使ASP.NET MVC与其他任何参数一样对待名为``id''的路由参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM