【发布时间】:2020-08-29 22:22:20
【问题描述】:
我有一个 ASP.NET Core razor 页面和模型,它使用查询字符串过滤搜索结果并通过 GET 进行分页。
假设用户执行了搜索以到达此页面:
https://localhost/Users?searchBy=Name&searchTerm=test&resultPage=2
现在在结果页面上,我有一个通过弹出模式执行删除的按钮。当用户单击删除时,它会发布到页面处理程序OnPostDelete()。我为此使用标签助手asp-page-handler:
<button asp-page-handler="Delete" asp-route-id="@Model...">
删除后,我希望用户被重定向回与以前完全相同的 URL,因此他/她停留在相同的结果页面上,而不是被重定向到普通索引页面。
所以我的问题是如何在发布和重定向的整个过程中轻松地保留这些查询字符串?目前这是我正在做的事情:
在删除弹出模态剃须刀页面上,我使用这些代码来捕获当前查询字符串:(我不知道如何直接将Context.Request.Query 转换为Dictionary)
@{
Dictionary<string, string> query = new Dictionary<string, string>();
foreach (var queryString in Context.Request.Query)
{
query.Add(queryString.Key, queryString.Value);
}
}
然后我将查询添加到删除按钮上的asp-all-route-data 标签助手:
<button asp-page-handler="Delete" asp-all-route-data="query" asp-route-id="@Model...">
这使得标签助手生成的 formaction 属性包含 POST URL 中的查询字符串。
然后在我的页面处理程序的OnPostDelete() 方法中,我再次重新捕获查询字符串,在重定向之前删除删除按钮添加的不需要的字符串(id 等):
Dictionary<string, string> query = new Dictionary<string, string>();
foreach (var queryString in HttpContext.Request.Query)
{
if ((queryString.Key != "id") && (queryString.Key != "handler"))
{
query.Add(queryString.Key, queryString.Value);
}
}
return RedirectToPage($"Index",query);
它有效,但看起来很乏味。我是新手,我相信有更好的方法可以做到这一点。非常感谢您的帮助。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-core razor-pages