【问题标题】:maproute, querystings and mvcmaproute、querystings 和 mvc
【发布时间】:2008-12-17 23:46:33
【问题描述】:

我有两条路线:

routes.MapRoute(
            "FetchVenue",                                     
            "venue/fetchlike/{q}",                                     
            new { controller = "venue", action = "fetchlike" }      
        );

        routes.MapRoute(
            "venue",                                         
            "venue/{venueId}",                                 
            new { controller = "Venue", action = "Index" }   
);

url /venue/fetchlike/test 被传递给正确的控制器 然而,url /venue/fetchlike/?q=test 被传递给 index 操作。

我希望能够将数据作为查询字符串传递。

我做错了什么?

【问题讨论】:

    标签: asp.net-mvc model-view-controller routing query-string maproute


    【解决方案1】:

    实际上问题在于路线:

     routes.MapRoute( "FetchVenue", "venue/fetchlike/{q}",  new { controller = "venue", action = "fetchlike" });
    

    实际上应该是:

     routes.MapRoute( "FetchVenue", "venue/fetchlike",  new { controller = "venue", action = "fetchlike" });
    

    表示该 url 应该是:

    /venue/fetchlike?q=test

    如上面 strelokstrelok 所建议的那样。

    因此,在查询参数的情况下,您不要在路由中定义它们!

    【讨论】:

    • 没错!路由中不应包含查询字符串参数。出于路由匹配的目的,查询字符串被忽略。生成 url 时,我们将额外提供的参数附加到查询字符串。
    【解决方案2】:

    就在我的脑海中,你的 URL 不应该是 /venue/fetchlike?q=test,而不是 /venue/fetchlike/?q=test

    【讨论】:

    • /venue/fetchlike?q=test 仍将映射到命名路由“venue” 难倒:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多