Как получить Html.BeginForm, чтобы перейти к правильному маршруту MVC
-
07-07-2019 - |
Вопрос
В моем приложении ASP.NET MVC у меня есть следующее поле ввода GET:
<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %>
<input type="text" name="searchQuery" id="searchQuery" />
<% } %
Я хочу, чтобы это попало в маршрут:
routes.MapRoute("ProductSearchRoute",
"Products/Search/{searchQuery}/{pageNumber}",
new { controller = "Products", action = "Search", pageNumber = 1 });
Проблема в том, что он переходит в /Products в виде строки запроса, напримерТовары?Поисковый запрос=Motoroil.Как мне заставить его использовать мой ProductSearchRoute и вместо этого сформировать /Products/Search/Motoroil ?
Решение
Если я вас правильно понимаю, вы пытаетесь динамически изменить местоположение, в которое отправляется форма, на основе входных данных формы?
Для этого вам нужно будет использовать JavaScript, чтобы изменить целевой атрибут формы. BeginForm () предназначен для визуализации тега формы, который с точки зрения html является статическим.
Другие советы
Ты мог бы попробовать:
<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>
Доброта,
Dan
public ActionResult SearchQuery (string searchQuery)
{
return RedirectToAction (searchQuery, "/Products/Search" );
}
public ActionResult Search (string searchQuery)
{
return View();
}
Как предложил @Daniel Elliott, используйте BeginRouteForm. Чтобы ваш URL генерировался правильно, вы должны установить значения маршрута с тем же именем, определенным в таблице маршрутов.
@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{
}