2010-09-07 2 views
1

Я пытаюсь создать маршрут к определенному контроллеру/действию, которому необходимо принять необязательные параметры запроса.Маршрут Querystring в MVC2

URL, я хотел бы принять являются:

/Products/ProductsListJson 
/Products/ProductsListJson?productTypeId=1 
/Products/ProductsListJson?productTypeId=1&brandId=2 
/Products/ProductsListJson?productTypeId=1&brandId=2&year=2010 

У меня есть действие, как это:

public JsonResult ProductsListJson(int productTypeId, int brandId, int year) 

и маршрут, как это:

routes.MapRoute(
    null, "Products/ProductsListJson", 
    new { controller = "Products", action = "ProductsListJson", productTypeId = 0, brandId = 0, year = 0 } 
); 

Я предположил, что действие «ProductsListJson» просто увидит URL-запросы запроса и сопоставит их с соответствующими аргументами, однако этого не происходит.

Кто-нибудь знает, как это может быть достигнуто?

ответ

2

Вам не нужно указывать их значения в маршруте, если эти параметры передаются в строке запроса:

routes.MapRoute(
    null, "Products/ProductsListJson", 
    new { controller = "Products", action = "ProductsListJson" } 
); 

и ваши действия:

public ActionResult ProductsListJson(int? productTypeId, int? brandId, int? year) 
{ 
    ... 
} 

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

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

Спасибо. Я бы хотел, чтобы они по умолчанию были 0 автоматически. Это возможно? Или мне нужно оценить в действии? –

+0

Ну, тогда просто используйте оператор [null coalescing] (http://msdn.microsoft.com/en-us/library/ms173224.aspx). Всякий раз, когда вам нужно их использовать: 'productTypeId ?? 0' –

+0

все хорошо .. надеялся, что маршрут справится с этим .. спасибо за вашу помощь :) –

Смежные вопросы