ASP.NET MVC路由永远循环

时间:2013-05-24 15:03:34

标签: asp.net-mvc routing routes asp.net-mvc-routing

我对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>部分列出的每个链接(和任何外部文件)文件

1 个答案:

答案 0 :(得分:0)

问题是由外部文件的链接引起的。例如:

我正在调用外部JavaScript文件:

src="../../Content/js/whatever"

因此,当尝试导航到该文件时,绝对URL将转换为:

http://localhost/Category/TestCategory/1/TestBrand/1/Content/js/whatever

哪个MVC的路由选择路由到问题中提到的Search操作。 所以实际上它不是“永远循环”,而是包含页面的每个图像/内容文件。

我通过删除../../将相对网址更改为/Content/js/whatever

来解决此问题