点击项目详细信息MVC 3/C#后导航回搜索结果

本文关键字:导航 搜索结果 项目 详细信息 MVC | 更新日期: 2023-09-27 18:19:34

我目前正在编写一个简单的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>

任何帮助都将不胜感激,谢谢。

点击项目详细信息MVC 3/C#后导航回搜索结果

您必须将输入保存在某个位置,最好的位置是url(因为它可以被用户缓存和记住)。

在控制器中定义另一个Action,它将完成搜索的主要工作,并通过查询字符串向其发送搜索参数。