我对MVC路由很陌生,所以如果这太简单了,请耐心等待。
我创建了以下路线:
routes.MapRoute("ProductSearch", "Category/{CategoryName}/{CategoryID}/{brandName}/{brandID}", new
{
controller = "Search",
action = "Search"
});
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
这是进入行动
搜索
至少第一次就好了(使用正确的参数值)。然后它将永远循环并丢失参数。知道可能会发生什么吗?
[编辑] 问题似乎来自于我有4个占位符这一事实。当我只设置2个占位符时,路线起作用。
行动:
public ActionResult Search(string query = null, int CategoryID = 0, int brandID = -1)
{
WebSearch search = null;
try
{
int loyaltyCardID = -1;
if (FocusStoreRemoting.UserInfo != null)
{
loyaltyCardID = FocusStoreRemoting.UserInfo.LoyaltyCardID;
}
if (query != null)
{
search = FocusStoreRemoting.Controller.DoWebSearch(FocusStoreRemoting.ClientSession.SessionID,
FocusStoreRemoting.StoreID, loyaltyCardID, queryString: query);
}
else if (CategoryID >= 0)
{
search = FocusStoreRemoting.Controller.DoWebSearch(FocusStoreRemoting.ClientSession.SessionID,
FocusStoreRemoting.StoreID, loyaltyCardID, groupID: CategoryID, brandID: brandID);
}
}
catch (Exception ex)
{
return RedirectToAction("DisplayError", "Error");
}
Session[SessionStrings.SearchItems] = search.StockItems;
return View(search.RefineCategories);
}
提前致谢。
[EDIT2]
我发现的一件事是,它不是永远循环,而是我在页面<head></head>
部分列出的每个链接(和任何外部文件)文件
答案 0 :(得分:0)
问题是由外部文件的链接引起的。例如:
我正在调用外部JavaScript文件:
src="../../Content/js/whatever"
因此,当尝试导航到该文件时,绝对URL将转换为:
http://localhost/Category/TestCategory/1/TestBrand/1/Content/js/whatever
哪个MVC的路由选择路由到问题中提到的Search
操作。
所以实际上它不是“永远循环”,而是包含页面的每个图像/内容文件。
我通过删除../../
将相对网址更改为/Content/js/whatever