Как получить Html.BeginForm для GET, чтобы исправить маршрут MVC - PullRequest
2 голосов
/ 16 сентября 2009

В моем приложении ASP.NET MVC у меня есть следующее поле ввода GET:

</p> <pre><code><% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %> <input type="text" name="searchQuery" id="searchQuery" /> <% } %

Я хочу, чтобы это пошло по маршруту:

</p> <pre><code>routes.MapRoute("ProductSearchRoute", "Products/Search/{searchQuery}/{pageNumber}", new { controller = "Products", action = "Search", pageNumber = 1 });

Проблема в том, что он переходит к / Products в виде строки запроса, например Продукты? SearchQuery = моторное. Как заставить его использовать мой ProductSearchRoute и вместо этого создать / Продукты / Поиск / Motoroil?

Ответы [ 4 ]

3 голосов
/ 16 сентября 2009

Если я правильно вас понимаю, вы пытаетесь динамически изменить местоположение, в которое отправляется форма, на основе входных данных формы?

Для этого вам нужно будет использовать javascript, чтобы изменить целевой атрибут формы. BeginForm () предназначен для отображения тега формы, который с точки зрения html является статическим.

1 голос
/ 28 сентября 2012
public ActionResult SearchQuery (string searchQuery)
{
    return RedirectToAction (searchQuery, "/Products/Search" );
}

public ActionResult Search (string searchQuery)
{
    return View();
}
1 голос
/ 16 сентября 2009

Вы можете попробовать:

<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>

Доброжелательность,

Dan

0 голосов
/ 21 сентября 2011

Как предложил @Daniel Elliott, используйте BeginRouteForm. Для правильной генерации URL-адреса необходимо установить значения маршрута с тем же именем, определенным в таблице маршрутов.

@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{

}
...