我一直在学习MVC 3,我无法弄清楚路由的一个方面。
如果我的路线如下:
routes.MapRoute("Default", "{controller}/{action}/{ID}");
路由限制每个操作只有一个名称ID的参数! 虽然控制器的名称或此路线的操作没有限制。
当然我可以定义更多路由,但必须有更好的方法让路由接受数据令牌,例如ListID或FieldID。
例如:我有一个带有两个动作的ListController:
GetListByID(int listID) and GetFieldByID(int fieldID)
在这种情况下,我必须定义两个路由,因为函数的参数名称是不同的。有一个更好的方法吗?谢谢!
答案 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)
唯一的要求是参数名称必须与令牌名称匹配。您可以使用任何所需的令牌名称。 controller
和action
是保留名称。