Вернитесь к результатам поиска, щелкнув по элементу MVC 3 / C #. - PullRequest
0 голосов
/ 06 января 2012

В настоящее время я пишу простое приложение MVC 3, которое отображает список элементов и позволяет пользователю фильтровать элементы (на той же странице).Затем пользователь может щелкнуть элемент и будет перенаправлен на страницу сведений.

Проблема, с которой я столкнулся, заключается в том, что когда пользователь нажимает кнопку «вернуться к списку», критерии поиска теряются, и текущая страница (результаты поиска разбиты на страницы).

Я новичок в MVC и не могу понять, как это сделать.

Контроллер

....
public ActionResult Index(PacketSearch search)
{            
    const int pageSize = 20;

    var allPackets = this.repository.GetAllPackets().Where(p => (string.IsNullOrEmpty(search.FromIp)) || p.FromIp == search.FromIp);

    var pagedPackets = new PaginatedList<RawPacket>(allPackets, search.Page ?? 0, pageSize);

    search.SearchResults = pagedPackets;

    return View(search);            
}

public ActionResult Details(int id)
{
    var packet = this.repository.GetPacket(id);

    return View(packet);
}

Главная страница

....    
@if (Model.SearchResults != null && Model.SearchResults.Count > 0)
{
    <table>
        <tr>
            <th>
                Timestamp
            </th>
            <th>
                From IP
            </th>
        </tr>
        @foreach (var item in Model.SearchResults) {
        <tr>
            <td>
                @Html.ActionLink(item.TimestampString, "Details", "Packets", new { id = item.Id }, null)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FromIp)
            </td>
        </tr>
        }
    </table>
}
<br />
@if (Model.SearchResults.HasPreviousPage)
{ 
    @Html.RouteLink("<<<", "Packets", new { page = (Model.SearchResults.PageIndex - 1) }) 
}

Page @(Model.SearchResults.PageIndex + 1) of @Model.SearchResults.TotalPages

@if (Model.SearchResults.HasNextPage)
{
    @Html.RouteLink(">>>", "Packets", new { page = (Model.SearchResults.PageIndex + 1) }) 
}

Подробности Страница

<h2>Packet Details</h2>

<fieldset>
    <legend>RawPacket</legend>

    <div class="display-label">Timestamp</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.TimestampString)
    </div>

    <div class="display-label">FromIp</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.FromIp)
    </div>
</fieldset>
<p>
    @Html.ActionLink("Back to List", "Index")
</p>

Любая помощь будет высоко ценится, спасибо.

1 Ответ

0 голосов
/ 06 января 2012

Вы должны где-то сохранить ввод, и лучшее место - это url (потому что он может быть кэширован и запомнен пользователем).

Определите еще одно действие в контроллере, которое будет выполнять основную работу поиска и отправлять поиск.параметры через строку запроса к нему.

...