2011-05-17 154 views
0

我有这样的路线声明:ASP.NET MVC - URL路由参数问题

routes.MapRoute(
       // Route name 
       "WhiteLabelPartners", 
       // URL with parameters 
       "partners/{partnerName}/{controller}/{action}/{id}", 
       // Parameter defaults 
       new { partnerName = "", controller = "", action = "index", id = UrlParameter.Optional } 
       ); 

当我试试这个网址:

/partners/a/savings/index/1 

...它工作正常。储蓄控制器的索引行为被击中。

但是,当我试试这个网址:

/partners/a/savings/index 

我得到一个 “未找到”。

如果我有{id}参数的UrlParameter.Optional,为什么仍然需要它?

任何人都可以解释吗?我如何使{id}参数可选?

谢谢

+0

如果您要求'/ partners/a/savings/index /'它有效吗? – Tejs 2011-05-17 19:13:24

+0

没有Tejs,它不起作用,我也得到了“未找到”。 – anon29874923 2011-05-17 19:14:29

+0

在路由默认值中指定一个默认控制器。如果路线匹配,它应该将您置于默认控制器上。 – Tejs 2011-05-17 19:15:41

回答

0

确保您的索引操作不指望参数。

如果您的控制器上,你的索引操作是这样的: 公众的ActionResult指数(INT ID)

它需要一个PARAM ID字段传递,因为你没有提供路由中的默认值。这可能是为什么你找到'找不到'的错误,因为它找不到匹配的操作。它期待:

公众的ActionResult指数()

你可以离开指数()动作不带参数,并从指数()操作中,检索的“身份证”传入的参数值,如果任何通过:

RouteData.Values [ “ID”]

使用它。 让我们知道,如果这对你有用。 (注意:我想发布评论,如tejs(但没有看到一个链接来添加评论?!),要求你在控制器上显示你的索引方法签名,所以请在问题中包括这一点。 )

+0

你可以使用public ActionResult Index(int? ID) - 这使ID可选 – 2011-05-17 19:23:02

+0

谢谢。我认为我的问题与{partnerName}参数有关。当我连接调试器并尝试URL/partners/a/savings/index时,出现异常,未找到。在检查requestContext.RouteData.Values时,我可以看到“控制器”,“动作”和“ID”键。然后是“a”,“储蓄”和“指数”作为价值。它不识别“partnerName”参数。我将我的操作方法更改为:public virtual ActionResult Index(string partnerName,string id){}但仍然没有运气。 – anon29874923 2011-05-17 19:40:24

+0

发现问题:有一个区域注册了“合作伙伴”的同名,并且它正在被选为路线,而不是我宣布的路线。 – anon29874923 2011-05-17 20:12:26