Asp.net mvc 2 MVC2-已映射但已渲染查询字符串的路由

Asp.net mvc 2 MVC2-已映射但已渲染查询字符串的路由,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc 2,Asp.net Mvc Routing,在我的Asp.net MVC2应用程序中,我已在global.asax.cs中注册了以下路由: routes.MapRoute( "Search", "Search/{action}/{category}/{query}/{page}", new { controller = "Search", action = "Results", category = "All", page = 1 }, new { page = @"\d{1,8}" } );

在我的Asp.net MVC2应用程序中,我已在global.asax.cs中注册了以下路由:

routes.MapRoute(
     "Search",
     "Search/{action}/{category}/{query}/{page}",
     new { controller = "Search", action = "Results", category = "All", page = 1 },
     new { page = @"\d{1,8}" }
);



// URL: /Search
routes.MapRoute(
     "SearchDefault",
     "Search",
     new { controller = "Search", action="Index" }
);


routes.MapRoute(
    "Product",
    "Product/{action}/{productcode}",
    new { controller = "Product", action = "Details" }
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我有我的搜索控制器:

public ActionResult Results(string category, string query, int page)
{
}
public ActionResult Details(string productcode)
{
    return View();
}
我有我的ProductController:

public ActionResult Results(string category, string query, int page)
{
}
public ActionResult Details(string productcode)
{
    return View();
}
在my Results.aspx视图中,存在以下操作链接:

<% foreach (var cat in Model.Categories) { %>
    <li><%= Html.ActionLink(cat.Name, "Results", "Search", new { category= cat.Name, query = Model.SearchText, page=1 }, null)%></li>
<% } %>
</ul>
<hr />
<table>
<% foreach (var p in Model.Products) { %>
    <tr>
        <td>
            <%= Html.ActionLink(p.ProductName, "Details", "Product", new { product = p.ProductCode }, new { })%><br />
        </td>
    </tr>   
 <% } %>



  • 第一个actionlink呈现为:

    “”

    鉴于第二个ActionLink正在正确呈现:

    “”

    奇怪的是,即使我手动输入,这两种方法都能正常工作:

    “”

    然后我的SearchController也正确执行。我真的希望我的ActionLink提供更干净的URL。我错过了什么


    提前感谢。

    由于我没有您的模型,我确实删除了foreach循环,并用字符串替换了所有未知值。在我的测试中,我发现了相反的行为:第一个链接正常,而另一个链接不干净。第二个操作链接的修复方法是将“产品”替换为“产品代码”



    假设这两种方法都有效,因为路由系统负责映射变量。

    routes.MapRoute( “搜索默认值”, “{controller}/{action}/{category}/{query}/{page}”, 新{}, 新建{controller=“Search”,action=“Results”} );

    这会让你的url像这样(可能需要一些额外的调整)

    忽略这一点。。。我没有看到问题中的第一条路线

    我通常喜欢在搜索中使用查询字符串,因为一旦得到两个或更多不需要的参数,构建和维护这些参数的路由就有点麻烦了