如何更新记录并返回筛选索引页

问题描述 投票:0回答:1

我有一个 Copy.cshtml 页面,它复制现有记录并允许用户基于现有记录创建新记录。通过创建新记录并返回 Index.cshtml,效果很好。我需要帮助的是能够创建记录并返回到通过搜索过滤的 Index.cshtml(从 Copy.cshtml 页面)。

例如用户在Index.cshtml页面中搜索某个客户端的所有记录。然后,他们希望通过单击其中一条记录旁边的“复制”按钮来复制其中一条客户记录,但希望返回到已为该客户筛选的页面,并查看他们添加的新记录以及该客户的其他记录客户。我不知道如何实现这一点。

我的 Copy.cshml 页面上有 3 个链接。第一个是复制记录并返回到所有记录的未过滤索引(现在可以使用),第二个是复制并返回到已过滤索引(我需要帮助),而第三个是仅返回到未过滤的索引索引而不更新任何内容(基本上是取消记录副本,现在也可以使用)。

这是代码:

        <div>
            <button type="submit" id="CopyRetToIndex" class="btn btn-primary" style="width:150px;">Add Copy</button>
            <button type="submit" asp-route-id="searchString" id="CopyRetToFilter" class="btn btn-primary" style="width:300px;">
                Add Copy/Return to Filtered Search</button>
            <a asp-page="Index" class="btn btn-secondary" style="width: 150px;">Back to List</a>
        </div>

在 .cs 方面,我认为我需要某种类型的“if”语句来区分这些按钮,所以到目前为止我已经有了:

    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            _db.Trip.Add(Trip);
            await _db.Trip.AddAsync(Trip);
            await _db.SaveChangesAsync();
            TempData["success"] = "Trip copied successfully.";
            return RedirectToPage("Index");
        }
        else if (ModelState.IsValid) 
        {
            _db.Trip.Add(Trip);
            await _db.Trip.AddAsync(Trip);
            await _db.SaveChangesAsync();
            TempData["success"] = "Trip copied successfully.";
            return RedirectToPage("/Trips?SearchString=");
        }
        return Page();
    }

我在这里进行了研究,只发现一个问题/答案似乎涵盖了我所需要的内容,但我不完全理解如何用我已有的东西来实现它。该帖子说为我的搜索创建一个会话,他们建议的代码是:

public ActionResult Search(string searchCriteria)
{
    Session["searchCriteria"] = searchCriteria;
    // do more stuff     
}

任何帮助将不胜感激。不确定我是否在 Index.cs 或 Copy.cs 上创建此会话信息,因为 Index.cs 是我的搜索来源以及如何在我自己的项目中工作。

我的Index.cs是这样的:

    public async Task OnGetAsync(string sortOrder, string searchString)
    {
        TripSort = sortOrder == "ClientName_Asc_Sort" ? "ClientName_Desc_Sort" : "ClientName_Asc_Sort";
        StatusSort = sortOrder == "Status_Asc_Sort" ? "Status_Desc_Sort" : "Status_Asc_Sort";
        CurrentFilter = searchString;

        IQueryable<Trip> trip = from s in _db.Trip select s;

        if (!string.IsNullOrEmpty(searchString))
            trip = (IQueryable<Trip>)trip.Where(s => s.ClientName.Contains(searchString) || s.PickUpDriver.Contains(searchString) || s.ReturnDriver.Contains(searchString) || s.PickUpDateTime.Value.ToString().Contains(searchString));

        switch (sortOrder)
        {
            case "ClientName_Asc_Sort":
                trip = trip.OrderBy(s => s.ClientName);
                break;
            case "ClientName_Desc_Sort":
                trip = trip.OrderByDescending(s => s.ClientName);
                break;
            case "Status_Asc_Sort":
                trip = trip.OrderBy(s => s.PickUpStatus);
                break;
            case "Status_Desc_Sort":
                trip = trip.OrderByDescending(s => s.PickUpStatus);
                break;
            default:
                trip = trip.OrderBy(s => s.ClientName);
                break;
        }
        Trip = await trip.AsNoTracking().ToListAsync();
    }

提前谢谢您!

为下面的评论请求添加了“复制”按钮(我不知道如何使用“复制”按钮专门添加到数据库并返回到过滤后的搜索。)这是一个猜测。

                        <a asp-page="Copy" asp-route-id="@obj.TripId" class="btn btn-primary mx-2">
                            <i class="bi bi-clipboard-check"></i>
                        </a>
search filtering razor-pages z-index updating
1个回答
0
投票

我想说的是,在您的

Copy.cshtml.cs
页面中,将过滤器信息添加到 GET 请求中。会是这样的

public async Task OnGetAsync(int copyItemId, string? sortOrder, string? searchString)
{
    this.PreviousSortOrder = sortOrder;
    this.PreviousSearchString = searchString;
}

然后在 razor 文件

Copy.cshtml
中,使用此信息将按钮定向到预过滤页面,如下所示:

<button type="submit"
        asp-page="Index"
        asp-route-sortOrder="@Model.PreviousSortOrder"
        asp-route-searchString="@Model.PreviousSearchString"
        id="CopyRetToFilter">
    Add Copy/Return to Filtered Search
</button>

要将其结合在一起,您需要实际将此信息告诉

Copy
页面。例如,通过使用复制按钮:

<a asp-page="Copy"
   asp-route-id="@obj.TripId"
   asp-route-sortOrder="@Model.StatusSort"
   asp-route-searchString="@Model.CurrentFilter">
    <i class="bi bi-clipboard-check"></i>
</a>
© www.soinside.com 2019 - 2024. All rights reserved.