Как получить Html.BeginForm, чтобы перейти к правильному маршруту MVC

StackOverflow https://stackoverflow.com/questions/1431285

  •  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 })
{

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top