ASP.NET MVC重用查询参数的问题

时间:2011-08-09 17:48:45

标签: c# asp.net-mvc

我有这条路线:

routes.MapRoute(
                "Default",
                "user/{userId}/{controller}/{action}",
                new {controller = "Home", action = "Index" }
                );

            routes.MapRoute(
                "Short",
                "{controller}/{action}",
                new { controller = "Home", action = "Index"}
                );

我在浏览器中的当前位置:

  

http://my_site/user/197/UserEvents

在此页面上有链接:

@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

2 个答案:

答案 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.DataTokensRouteData.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...
    }
}