У меня есть простая поисковая форма на моей основной странице и поисковый контроллер и представление. Я пытаюсь добраться, следующий маршрут для поиска строки называют "myterm" (например): root/search/myterm
Форма на основной странице:
<% using (Html.BeginForm("SearchResults", "Search", FormMethod.Post, new { id = "search_form" }))
{ %>
<input name="searchTerm" type="text" class="textfield" />
<input name="search" type="submit" value="search" class="button" />
<%} %>
Действие контроллера:
public ActionResult SearchResults(string searchTerm){...}
Маршрут я Использую:
routes.MapRoute(
"Search",
"search/{term}",
new { controller = "Search", action = "SearchResults", term = (string)null }
);
routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = "Home", action = "Index" }
);
Я всегда получаю URL "корень/поиск" без критерия поиска, какой критерий поиска я ввожу.
Спасибо.
Итак, если я правильно вас понял, вы пытаетесь проложить маршрут, чтобы можно было перейти к http: // www. .whatever.com / search / blah , и вы будете перенаправлены к действию SearchResults с параметром searchTerm, равным «blah».
Об этом позаботится следующий маршрут:
routes.MapRoute(
"Search",
"search/{searchTerm}",
new { controller = "Search", action = "SearchResults" }
);
Убедитесь, что маршрут задан ПЕРЕД маршрутом по умолчанию, иначе сначала будет сопоставлен маршрут по умолчанию. Обратите внимание, что термин "термин" изменен на "searchTerm", чтобы соответствовать параметру в вашем действии. Это необходимо.
Вы используете идентификатор в теге beginform и {term} в маршруте.
Эти двое должны совпадать.