Маршрут MVC с массивом однородных параметров - PullRequest
4 голосов
/ 06 октября 2010

Я пытался создать маршруты для ресурса с массивом однородных параметров.

URL будет выглядеть следующим образом: продукты / категория / {categoryId1} / {categoryId2} /.../ brand / {brandID1} / {brandID2} /...

И хотелось быметод действия будет выглядеть следующим образом: public ActionResult GetProducts (IList categoryID, ILIsts brandID) {...}

, где категория и бренд являются независимыми фильтрами.

Я нашел решение для аналогичной задачи: Массив параметров ASP.NET MVC 2

И задаетесь вопросом, нет ли более красивого решения, позволяющего использовать этот прототип общедоступного ActionResult GetProducts (IList categoryID)

вместоpublic ActionResult myAction (string url)

для метода действия

- чтобы избежать разбиения строки и приведения?

А как мне подобрать это решение для моего дела?

Заранее всем спасибо!

1 Ответ

7 голосов
/ 06 октября 2010

Используйте пользовательский обработчик, такой как тот, который я опубликовал в этот ответ .

Возможно, понадобятся некоторые корректировки, но что-то вроде этого должно работать:

public class ProductsRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        IRouteHandler handler = new MvcRouteHandler();
        var vals = requestContext.RouteData.Values;
        vals["categoryID"] = vals["categories"].Split("/");
        vals["brandID"] = vals["brands"].Split("/");
        return handler.GetHttpHandler(requestContext);
    }
}

// in the route:
routes.MapRoute(
   "test",
   "products/category/{*categories}/brand/{*brands}",
   new { Controller = "product", Action = "getproducts"}
   ).RouteHandler = new ProductsRouteHandler ();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...