【问题标题】:ASP.NET MVC Problem with Re-use query parameters重用查询参数的 ASP.NET MVC 问题
【发布时间】:2011-08-09 17:48:45
【问题描述】:

我有这条路线:

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/user/197/Friends

第二个链接生成:

my_site/UserInfo?userId=197

为什么第二个链接中的 userId 的值为 197?为什么没有链接:

我的站点/用户信息

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案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 不可能重用任何东西。

    【讨论】:

    • 我可以看看它是如何用于生成链接的吗?
    【解决方案2】:

    我可能会做类似的事情

    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...
        }
    }
    

    【讨论】:

    • 我觉得你没看懂问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多