Asp.net mvc 2 MVC2-已映射但已渲染查询字符串的路由
在我的Asp.net MVC2应用程序中,我已在global.asax.cs中注册了以下路由: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}" } );
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像这样(可能需要一些额外的调整)
忽略这一点。。。我没有看到问题中的第一条路线
我通常喜欢在搜索中使用查询字符串,因为一旦得到两个或更多不需要的参数,构建和维护这些参数的路由就有点麻烦了