MVC3路由中的数据令牌名称

时间:2011-03-28 05:11:00

标签: c# asp.net-mvc-3 asp.net-mvc-routing

我一直在学习MVC 3,我无法弄清楚路由的一个方面。

如果我的路线如下:

routes.MapRoute("Default", "{controller}/{action}/{ID}");

路由限制每个操作只有一个名称ID的参数! 虽然控制器的名称或此路线的操作没有限制。

当然我可以定义更多路由,但必须有更好的方法让路由接受数据令牌,例如ListID或FieldID。

例如:我有一个带有两个动作的ListController:

GetListByID(int listID) and GetFieldByID(int fieldID)

在这种情况下,我必须定义两个路由,因为函数的参数名称是不同的。有一个更好的方法吗?谢谢!

3 个答案:

答案 0 :(得分:3)

不,您的操作可以使用任意数量的参数,只是您的操作中名为“ID”的一个参数将包含{ID}所代表的该位置的网址内的值

如果你在CartController中有这个动作

public ActionResult Add(int ID, int quantity) { /* method body */ }

网址

/cart/add/1234

将调用CartController的Add方法,将1234传递给ID param,将零调入quantity

但是

/cart/add/1234?quantity=4

quantity设为4

您也可以拥有复杂的参数 这是一个很好的介绍 http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

答案 1 :(得分:2)

如果您不再定义路线,您的数据令牌将显示为

/YourController/YourAction/3?ListID=123&FieldID=456

如果你想要像

那样不那么象征性的东西
/YourController/YourAction/3/123/456

您需要将路线定义为

routes.MapRoute("TokenHostileRoute", "{controller}/{action}/{ID}/{ListID}/{FieldID}");

答案 2 :(得分:1)

唯一的要求是参数名称必须与令牌名称匹配。您可以使用任何所需的令牌名称。 controlleraction是保留名称。