ASP.net MVC 2 маршрутизации - PullRequest
       31

ASP.net MVC 2 маршрутизации

2 голосов
/ 14 апреля 2011
class HomeController
{
    public ActionResult Search(int[] sections, int categories)
    {
       return View();
    }
}

Мне нужен URL-адрес, например

website.com / search / 1,2,3 / 5

Какую карту маршрутов следует использовать?

На данный момент RegisterRoutes выглядит

public static void RegisterRoutes(RouteCollection routes)
{
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
            );
}

Ответы [ 3 ]

0 голосов
/ 14 апреля 2011

Я бы изменил определение контроллера для обработки массива:

    public ActionResult Search(string sections, int categories)
{
   // sectionsArray is int[].
   var sectionsArray = sections.Split(',').Select(x => int.Parse(x)).ToArray();
   return View();
}  

, тогда вы можете определить маршрутизацию как обычно: Home/{sections}/{categories}:

routes.MapRoute(
    "Search", // Route name
    "{Home}/{sections}/{categories}", // URL with parameters
    new { controller = "Home", action = "Search" } // Parameter defaults
);  

Обратите внимание, что у вас естьчтобы добавить это поверх стандартного.

0 голосов
/ 14 апреля 2011

Добавить маршрут поиска, не заменять маршрут по умолчанию

Поскольку вы, вероятно, по-прежнему будете использовать маршрут по умолчанию с комбинацией контроллер / действие, я предлагаю вам сделать это:

public static void RegisterRoutes(RouteCollection routes)
{
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
            "Search",
            "search/{sections}/{section}", // rename these variables to what they actually are
            new { controller = "Search", action = "Sections", sections = UrlParameter.Optional, section = UrlParameter.Optinal } 
      );

      routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      );
}

Нотак как трудно сказать, какие требования вы предъявляете, возможно, вы пытаетесь использовать параметр catch-all route, но не в конце своего URL-запроса.Если это так, вы можете проверить мой код в сообщении в блоге такого класса Route, который позволяет охватывать все разделы в любом месте URL, а не только в конце, как это по умолчанию.

0 голосов
/ 14 апреля 2011

используйте что-то вроде:

var ints = new int[] {1, 2, 3, 4, 5};

var result = string.Join (",", ints.Select (x => x.ToString ()). ToArray ());

для построения строки, разделенной запятыми, и передачи ее по маршруту «Поиск / {csv} / {somevalue}»

...