什么';在ASP.NET核心页面中,在帖子和重定向之间保留现有查询字符串的最简单方法是什么?
我有一个ASP.NET Core razor页面和模型,它使用查询字符串过滤搜索结果并通过GET进行分页 假设用户执行搜索以到达此页面:什么';在ASP.NET核心页面中,在帖子和重定向之间保留现有查询字符串的最简单方法是什么?,asp.net,asp.net-mvc,asp.net-core,razor-pages,Asp.net,Asp.net Mvc,Asp.net Core,Razor Pages,我有一个ASP.NET Core razor页面和模型,它使用查询字符串过滤搜索结果并通过GET进行分页 假设用户执行搜索以到达此页面: https://localhost/Users?searchBy=Name&searchTerm=test&resultPage=2 现在在结果页面上,我有一个按钮,通过弹出模式执行删除。当用户单击delete时,它将发布到页面处理程序OnPostDelete()。我使用标记帮助程序asp页面处理程序执行以下操作: 在删除之后,我希望用户被重定向回与之前完全
https://localhost/Users?searchBy=Name&searchTerm=test&resultPage=2
现在在结果页面上,我有一个按钮,通过弹出模式执行删除。当用户单击delete时,它将发布到页面处理程序OnPostDelete()
。我使用标记帮助程序asp页面处理程序执行以下操作:
在删除之后,我希望用户被重定向回与之前完全相同的URL,这样他/她就停留在相同的结果页面上,而不是被重定向到普通索引页面
所以我的问题是如何在发布和重定向的整个过程中轻松地保持这些查询字符串的连接?目前我正在做的是:
在删除弹出页面上,我使用这些代码捕获当前的查询字符串:(我不知道如何直接将Context.Request.query
转换为字典
)
它可以工作,但看起来很乏味。我是新手,我相信有更好的方法。非常感谢您的帮助。这可以用更简单的方式解决
加
在您的POST请求结束时:
return Redirect(ReturnUrl);
以上代码在我的电脑上进行了测试和验证
这是登录过程中经常使用的模式:
- 用户单击指向需要身份验证/授权的资源的链接
- 用户被重定向到登录页面
- 用户提交登录表单
- 用户被重定向到需要身份验证/授权的资源
谢谢!我也没有意识到我必须@using Microsoft.AspNetCore.Http.Extensions来引入.GetEncodedPathAndQuery()方法(因为如果不这样做,Intellisense会显示其他方法,这让我想知道为什么像完整路径和查询字符串这样的东西不可用)
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);
<input type="hidden" asp-for="ReturnUrl" value="@Request.GetEncodedPathAndQuery()" />
<form method="post">
<input type="hidden" asp-for="ReturnUrl" value="@Request.GetEncodedPathAndQuery()" />
<button type="submit" asp-page-handler="Delete" asp-route-id="1">Button 1</button>
<button type="submit" asp-page-handler="Delete" asp-route-id="2">Button 2</button>
</form>
<form method="post"
asp-page-handler="Delete"
asp-route-id="1"
asp-route-returnUrl="@Request.GetEncodedPathAndQuery()">
<button type="submit">Button 1</button>
</form>
<form method="post"
asp-page-handler="Delete"
asp-route-id="2"
asp-route-returnUrl="@Request.GetEncodedPathAndQuery()">
<button type="submit">Button 2</button>
</form>
[BindProperty]
public string ReturnUrl { get; set; }
return Redirect(ReturnUrl);