使用两条路由 mvc 2 时 URL 参数中的问号

Posted

技术标签:

【中文标题】使用两条路由 mvc 2 时 URL 参数中的问号【英文标题】:Question Mark in URL Parameter when using two routes mvc 2 【发布时间】:2012-01-25 18:19:40 【问题描述】:

我有两条路由,当我使用默认路由时,它会在参数中显示带有问号的 url。我得到的是 Editar/id?3 -- 而不是 Editar/id/3。另一条路线工作正常,你能给我一些亮光吗?谢谢。

全球.asax

public class MvcApplication : System.Web.HttpApplication

    public static void RegisterRoutes(RouteCollection routes)
    
        routes.IgnoreRoute("resource.axd/*pathInfo");

        routes.MapRoute(
            "GaleriaCustom", // Route name
            "controller/action/categoria/subCategoria", // URL with parameters
            new  controller = "Galeria", action = "Index", categoria = "Noivinhos", subCategoria = UrlParameter.Optional  // Parameter defaults
        );

        routes.MapRoute(
            "Default", // Route name
            "controller/action/id", // URL with parameters
            new  controller = "Home", action = "Index", id = UrlParameter.Optional  // Parameter defaults
        );           



    

    protected void Application_Start()
    
        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);
    

Index.aspx -- 错误的网址 Editar/id?3 -- 改为 Editar/id/3

<a href="<%: Url.Action("Editar", new id = item.galeria_id ) %>"><img src="<%: Url.Content("~/Content/Img/Design/editar.png") %>"  title="Editar"/></a> 
<a href="<%: Url.Action("Detalhe", new  id=item.galeria_id ) %>"><img src="<%: Url.Content("~/Content/Img/Design/detalhe.png") %>"  title="Detalhe"/></a> 
<a href="<%: Url.Action("Excluir", new  id=item.galeria_id ) %>"><img src="<%: Url.Content("~/Content/Img/Design/delete.png") %>"  title="Excluir"/></a> 

【问题讨论】:

【参考方案1】:

您的第一条路线比第二条路线更贪婪,除非您使用一些约束,否则它将匹配所有网址。另一种可能性是使用 RouteUrl 帮助器并指定路由的名称:

<%= Url.RouteUrl("Default", new  action = "Editar", id = item.galeria_id ) %>

【讨论】:

感谢您的回复,它修复了链接上的网址,但链接不再起作用,我现在单击时遇到此问题(参数字典包含参数的空条目'TudoDeMassinha.Controllers.AdminGaleriaController' 中方法'System.Web.Mvc.ActionResult Editar(Int32)' 的不可空类型'System.Int32' 的'id'。可选参数必须是引用类型,可空类型)

以上是关于使用两条路由 mvc 2 时 URL 参数中的问号的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回 404

使用 mvc 路由约束,因此 url 只能映射到三个可能的参数之一

URL中的参数分隔符,误用问号的情况

当 url 包含编码的 & 符号时,MVC WEB API 路由失败

Angular 路由模板 url 是不是支持 ASP.Net MVC 5 项目中的 *.cshtml 文件?

asp.net mvc 路由:如何使用默认操作但非默认参数?