У меня есть форма, отображаемая с помощью Html.BeginForm (), она существует как компонент на главной странице, поэтому она появляется на каждой странице приложения. Я сделал это с помощью Html.RenderAction () из сборки Mvc Futures. Это простая форма поиска, которая обновляет некоторые элементы в одном и том же компоненте под самой формой поиска и выполняет GET, чтобы поисковый термин появлялся в строке запроса.
<div class="sideBarContent">
<h2>Search Products</h2>
<% using (Html.BeginForm(ViewContext.RouteData.Values["action"].ToString(),
ViewContext.RouteData.Values["controller"].ToString(), FormMethod.Get)) { %>
<fieldset>
<legend>Search Products</legend>
<div class="formRow">
<label for="ProductsSearch">Search</label>
<%= Html.TextBox("ProductsSearch") %>
</div>
<input type="submit" value="Search" class="button" />
</fieldset>
<% } %>
<ul>
// Products will eventually be listed here
</ul>
</div>
Мне нужна эта форма, чтобы сделать следующее:
1) Он должен выполнить GET для любой текущей страницы при добавлении «ProductsSearch» в качестве параметра строки запроса (например, example.com /? ProductsSearch = test или example.com / книги / фантастика? ProductsSearch = тест )
2) Следует помнить о любых существующих параметрах строки запроса, которые уже находятся в строке запроса, и сохранять их после нажатия кнопки «Поиск», например. example.com / myOrders? Page = 2 после того, как поиск нажмет, он должен перейти на example.com / myOrders? Page = 2 & ProductsSearch = test )
Я могу заставить это сделать 1), но не могу 2).
Я полагаю, что обычно для операций from и GET и добавления параметров строки запроса необходимо иметь скрытые поля формы, чтобы я мог написать служебную функцию, которая автоматически добавляет набор скрытых полей формы для любых значений строки запроса, но я хотел проверить что не было более легкого подхода, или, может быть, я ошибаюсь.
Ура!