当有很多参数时,MVC自定义路由不起作用

时间:2014-12-08 13:31:36

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing url-routing

在MVC中设置自定义路由时,我遇到了很多问题

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
                "SearchList",
                "Search/{city}/{cat}", // URL
                new
                {
                    controller = "Search",
                    action = "Index"

                }, // URL Defaults
               new { id = @"\d+" }
            );

SearchController

public ActionResult Index(string city, string search, string cat, int? pageNo, string ratio, string fee, string curr, int? id)

此方法用于搜索包含过滤器的特定项目。

我尝试了很多排列组合,但没有成功。

我需要以下类型的结果:

http://localhost/Search/City/Category
http://localhost/Search/City
http://localhost/Search/Category
http://localhost/Search/Curr

我正在接受"一种公共行动方法' pune'在控制器上没有找到App.Web.Controllers.SearchController'。"输入以下网址时出错:

http://localhost:5355/Search/pune/Preschool

2 个答案:

答案 0 :(得分:1)

您的搜索确实不应该使用路由级参数,而应该使用查询字符串。这就是它的用途,查询 ing。

使用路由参数进行搜索时会遇到问题,因为使用MVC路由时,只能将最后一个路由参数设为可选。其余的都是必需的。

使用看起来像这样的网址会更好:

http://localhost:5355/Search?City=pune&Category=Preschool

@theDarse对你看到的异常消息是正确的。在路由配置中的某个位置,您具有默认路由。确保在 SearchList路径后定义

答案 1 :(得分:0)

为什么不考虑使用Area,这可能更容易,但我不确定你是否可以这样做,我从来没有这样做过。