我有这条路线:
routes.MapRoute(
"Default",
"user/{userId}/{controller}/{action}",
new {controller = "Home", action = "Index" }
);
routes.MapRoute(
"Short",
"{controller}/{action}",
new { controller = "Home", action = "Index"}
);
我在浏览器中的当前位置:
在此页面上有链接:
@Html.ActionLink("Friends", "Index", "Friends")
@Html.ActionLink("Information", "Index", "UserInfo", new { userId = (string)null },null)
MVC重用查询参数,所以第一次生成链接:
my_site /用户/ 197 /好友
生成第二个链接:
my_site /的UserInfo?用户id = 197
为什么第二个链接中的userId值为197?为什么没有链接:
my_site /的UserInfo
答案 0 :(得分:1)
我无法确定MVC决定重用其手头的任何路线值的确切位置,但这是我在项目中使用的内容:
//
// This fixes "ambient values" problem:
// http://stackoverflow.com/questions/2651675/asp-net-mvc-html-actionlink-maintains-route-values
// http://stackoverflow.com/questions/780643/asp-net-mvc-html-actionlink-keeping-route-value-i-dont-want
return new UrlHelper(
new RequestContext(
HttpContext.Current,
new RouteData {
Route = urlHelper.RequestContext.RouteData.Route,
RouteHandler = urlHelper.RequestContext.RouteData.RouteHandler
}), urlHelper.RouteCollection)
.Action(actionName, controllerName, routeValuesWithArea);
这里的关键是RouteData.DataTokens
和RouteData.Values
都没有设置,因此MVC无法重用。
答案 1 :(得分:0)
我可能会做类似
的事情http://foo.com/user/events/197
http://foo.com/user/events?userId=197
我发现我尝试使用ASP.NET路由约定越多,我发送应用程序的时间越多。
public class UserController : Controller
{
public ActionResult Events(long userId)
{
//Do Something...
}
}
public class FriendsController : Controller
{
public ActionResult Index(long userId)
{
//Do Something...
}
}