Рефакторинг HTML-разметки с POST на GET

У меня есть следующая разметка в представлении ASP.NET MVC (это окно поиска Twitter Bootstrap) :

<form action="@Url.Action("Results", "Search")" method="post">
    <input type="text" class="search-query" id="SearchTerm" name="SearchTerm" />
</form>

Этот код работает, как и ожидалось, но использование поста здесь вызывает проблемы.

Как я могу изменить эту разметку, чтобы вместо этого передавать поисковый запрос в качестве аргумента URL? Я не совсем уверен, как подойти к этому, если не считать сохранения существующей разметки, а затем перенаправления с контроллера. Я думаю, что должен быть более эффективный способ, чем этот.


person Jonathan Wood    schedule 01.06.2012    source источник
comment
Если вы сделаете method=get, разве он не передаст значение поискового термина в строке запроса естественным образом?   -  person Brian Mains    schedule 01.06.2012
comment
Просто из любопытства, какие проблемы у вас возникают с постоперацией?   -  person Brian Mains    schedule 01.06.2012
comment
@JonathanWood Вам следует изучить шаблон PRG. Опубликовать, перенаправить, получить. Или вы всегда можете POST использовать AJAX.   -  person Dismissile    schedule 01.06.2012


Ответы (1)


Вы должны иметь возможность изменить method="post" на method="get" и получить желаемый результат. Форма с настройкой метода get помещает поля формы в строку запроса в соответствии со своим поведением по умолчанию.

В качестве обходного пути, если поведение по умолчанию вас не устраивает, вы можете поймать событие отправки формы и выполнить:

window.location = form.action + "?SearchTerm=" + document.getElementById("SearchTerm").value

Что-то вроде этого, где форма — это ссылка на элемент формы. Вы можете создать ссылку и перенаправить с помощью javascript, который является запросом на получение.

person Brian Mains    schedule 01.06.2012
comment
Да, это работало отлично и не требовало дальнейших изменений. Спасибо. - person Jonathan Wood; 02.06.2012