Я довольно новичок в MVC. Я пытаюсь настроить страницу поиска, которая ищет базу данных и возвращает результаты. Поле поиска находится в Html.BeginForm на мой взгляд, и выглядит следующим образом:ActionResult не получает вызовом rubelink. Formcollection виновник?
<% using (Html.BeginForm())
{ %>
<%= Html.TextBox("searchBox", null, new { @id = "searchBox" })%>
<div id="searchButtonsDiv">
<input type="submit" value="Search" />
</div>
<% } %>
//Results are returned in a ul and orgainized
//Pagination below
<% if (Model.HasPreviousPage)
{ %>
<%= Html.RouteLink("Previous", "SearchResults", new { page = (Model.PageIndex - 1) })%>
<% } %>
<% if (Model.HasNextPage)
{ %>
<%= Html.RouteLink("Next", "SearchResults", new { formCollection = "", page = (Model.PageIndex + 1) })%>
<% } %>
Я использую FormCollection перейти на мой контроллер, который выглядит следующим образом:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection formCollection, int? page)
{
var searchString = formCollection["searchBox"];
var results = resultsRepository.GetResults();
var paginatedResults = new PaginatedList<Driver>(results, page ?? 0, pageSize);
return View(paginatedResults);
}
До сих пор так хорошо. Когда я набираю слово и нажимаю кнопку отправки, индексируется, и база данных возвращается соответственно. Улица заполняется результатами, а когда результатов больше результатов страницы (10 в моем случае), появляется ссылка «Далее».
Когда я нажимаю «Далее», страница по умолчанию просто загружается. Нет разбиения на страницы или что-то в этом роде. Я уверен, что это связано с тем, что мой Index ActionResult имеет форму FormCollection в качестве параметра. Я думал, что я где-то читал, что можно обрабатывать только строки/ints? Вот MapRoute:
routes.MapRoute(
"SearchResults",
"Drivers/Index/{formCollection}/{page}",
new { controller = "Drivers", action = "Index", formCollection = "", page = "" }
);
Я вообще что-то пропустил или есть способ справиться с этим? Я знаю, что я мог бы просто использовать jquery/ajax для отправки строки, содержащейся в списке поиска, но я не хочу этого делать, потому что позже я планирую добавить флажок как средство фильтрации поисков и т. Д.
Я попробовал несколько различные способы установки значения formCollection, включая создание нового FormCollection, который добавляет searchBox, и просто передающие строки и т. д.
Когда вы нажимаете «Далее», это просто вызов HttpGet из результата action Index? –
Он вызывает другой индекс ActionResult, который у меня нет, который не принимает никаких параметров. (public ActionResult Index() { return View(); Я думаю, что он никогда не вызывается, потому что его FormCollection не может использоваться для маршрутизации. Я думаю, что это должна быть строка или int. } – Darcy