3

Я работаю по маршруту MVC, который примет неизвестное количество параметров в конце URL-адреса. Что-то вроде этого:MVC-обработчик для неизвестного количества необязательных параметров

domain.com/category/keyword1/keyword2/.../keywordN

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

Единственный подход, который я могу думать так далеко UGLY ... просто сделать ActionResult, который имеет больше параметров, чем я когда-либо, скорее всего, потребуется:

ActionResult CategoryPage (строка urlValue1, строка urlValue2, строка urlValue3, и т. д.) { }

Это просто не так. Полагаю, я мог бы втиснуть их в querystring, но потом я потерял свои сексуальные URL-адреса MVC, так? Есть ли лучший способ объявить метод обработчика таким образом, чтобы он обрабатывал огромное количество необязательных параметров?

Маршруты должны быть подключены к Application Start, что не должно быть так сложно. Максимальное количество ключевых слов можно легко определить из базы данных, так что там нет biggie.

Спасибо!

+0

возможно дубликат [ASP.Net: неизвестно длина MVC дорожки] (HTTP: //stackoverflow.com/questions/1332782/asp-net-unknown-length-mvc-paths) – Palantir

+0

+1 для Палантира ... Я не знал, что вы это делаете с использованием синтаксиса маршрута. thx – Hal

ответ

6

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

routes.MapRoute("Category", "category/{*keywords}", new { controller = "Category", action = "Search", keywords = "" }); 

Тогда вы будете иметь один параметр в методе поиска действия:

public ActionResult Search(string keywords) 
{ 
    // Now you have to split the keywords parameter with '/' as delimiter. 
} 

Вот список возможных URL, с значение параметра ключевых слов:

http://www.example.com/category (ключевые слова: "")
http://www.example.com/category/foo (ключевые слова : "Foo")
http://www.example.com/category/foo/bar (ключевые слова: "Foo/бар")
http://www.example.com/category/foo/bar/zap (ключевые слова: "Foo/бар/зап")

+0

Спасибо!Хотелось бы проголосовать ... stackoverflow не позволит мне позволить. Ура! –

1

Вы можете сделать ключевые слова частей одного и того же параметра маршрута и объединить их с тире (-). Ваш поиск маршрута будет выглядеть следующим образом

routes.MapRoute("Category", "category/{searchstring}", new { controller = "Category", action = "Search", searchstring = "" }, null)); 

и вы будете строить свои URL-адреса, чтобы выглядеть следующим образом:

www.domain.com/category/cars-furniture-houses-apparel 

Вы бы разделить его на ваши действия контроллера.

Старайтесь избегать огромного количества параметров любой ценой.

+0

Спасибо! Хотелось бы проголосовать ... stackoverflow не позволит мне позволить. Ура! –

+0

Раненый в основном с использованием этого решения, хотя ответ Кристофа Класа тоже был хорош. Я решил объединиться с запятой ',', но это было по существу тем, что мы сделали. http://www.cpuboards.com/cpu-boards/board-type-mini-itx,cpu-intel-celeron,ethernet-lan-intel-82562,standard-personal-computer/ –

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