ASP.Net MVC Маршруты не работают должным образом - PullRequest
2 голосов
/ 04 ноября 2010

В нашем файле Global.asax.cs есть несколько маршрутов, но один из них явно не используется.

// Search (NOT working).
routes.MapRoute(
         "Search",
         "search/{query}",
         new { controller = "Search", action = "Index" });

// Homepage (I believe the problem could be here, but not sure).
routes.MapRoute(
         "MainIndex",
         "{language}",
         new { controller = "Main", action = "Index", language = string.Empty });

Когда мы выполняем поиск в форме поиска с атрибутом действия "/ Поиск", пользователь отправляется на домашнюю страницу, а URL в адресной строке "/Search?query=example+search".

Атрибут действия формы встроен с использованием этого кода:

<form id="form1" action="<%= Url.Action("Index", "Search") %>">

Мне кажется правильным, но имя действия должно быть "/ search" вместо "/ Search", верно?

Ответы [ 3 ]

3 голосов
/ 04 ноября 2010

Я только что попробовал ваш маршрут со следующим представлением

<form id="form1"  method="post" action="<%= Url.Action("Index", "Search") %>">
Enter something: <input type="text" name="query" id="query" value="hello" />
<input type="submit" />
</form>

и таким контроллером

public ActionResult Index(string query)
{
    return View();
} 

, и он работает нормально.Обратите внимание, что (1) я использую method = post и (2) что в текстовом поле для имени и идентификатора установлено значение «query», что и сделал бы для вас Html.TextBox.Это то, что позволило привязке подобрать значение и правильно передать его контроллеру.

2 голосов
/ 04 ноября 2010

Я всегда нахожу этот инструмент чрезвычайно полезным при отладке маршрутов. Route Debugger

1 голос
/ 04 ноября 2010

Попробуйте сделать "search/{query}" совпадающим с регистром => "Search/{query}"

Хорошо, ваше действие с тегом формы - /Search/Index, которое будет соответствовать вашему маршруту Search/{query}, но ваш запрос будет индексом. Однако, с ?query=example+search в конце вашего маршрута, маршрут поиска не будет знать, как обрабатывать этот параметр запроса. Я бы просто обновил атрибут действия в теге формы, чтобы он был /Search, а не использовал помощник URL.

...