使用两条路由 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 包含编码的 & 符号时,MVC WEB API 路由失败