【发布时间】:2012-10-31 17:08:32
【问题描述】:
我知道你可以通过像 .com/MyPage/?controlID=5 这样的 URL 传递参数,但是你怎么能用像 .com/MyPage/5 这样的东西呢?因此不需要变量名或问号。
【问题讨论】:
标签: c# html asp.net-mvc razor asp.net-mvc-routing
我知道你可以通过像 .com/MyPage/?controlID=5 这样的 URL 传递参数,但是你怎么能用像 .com/MyPage/5 这样的东西呢?因此不需要变量名或问号。
【问题讨论】:
标签: c# html asp.net-mvc razor asp.net-mvc-routing
您可以定义自定义路由,或使用模型绑定来获得预期效果。在您的情况下,路线将类似于:
routes.Add("someRoute",
"{controller}/{action}/{controlId}",
new { controller = "Home", action = "Index", controlId = UrlParameter.Optional }
);
public ActionResult Index(int? controlId)
{
}
现在,该路由的唯一“陷阱”是,如果您还指定了默认路由,则这两个路由将发生争用,而您定义的第一个将获胜。如果存在某种形式的区分值(例如,该 controlId 始终与某种模式匹配),那么您始终可以向路由添加 HttpRouteConstraint 以区分您的新路由和默认路由。
或者,如果您仍在使用默认路由,您可以将操作方法上的参数重命名为id,并将查询字符串键更改为“id”:
public ActionResult Index(int? id)
{
// Do Stuff
}
【讨论】:
在 MyPageController 中创建一个方法:
public ActionResult Index (int id)
{
}
这将适用于默认路由
【讨论】: