我正在使用ASP.NET Core 2.1创建身份服务器。我使用Asp身份,并搭建了登录和注册页面。
我有以下页面:
[AllowAnonymous]
public class RegisterModel : PageModel
{
......
public string ReturnUrl { get; set; }
......
public void OnGet(string returnUrl = null)
{
ReturnUrl = returnUrl;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
return LocalRedirect(returnUrl);
}
return Page();
}
cshtml包含:
@page
@model RegisterModel
......
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
......
行为: 我进入此链接的页面: https://localhost:5028/Identity/Account/Register?returnUrl=testlink ,因此ReturnUrl在OnGet()中设置为“ testlink”,并传递给表单。
我的问题:用什么替换“ return Page(); ”,以便可以纠正情况2所述的行为?我尝试了“ return LocalRedirect(“ / Identity / Account / Register?returnUrl =” + returnUrl)”,但这会刷新页面(清除用户输入并且不显示验证错误消息)。>
谢谢!
答案 0 :(得分:3)
在POST上设置ReturnUrl
属性,以便在页面重新加载时可用。
public IActionResult OnPost(string returnUrl = null) {
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid) {
return LocalRedirect(returnUrl);
}
//...if we get this far something went wrong.
//reset properties on model so they appear when page reloads
ReturnUrl = returnUrl;
return Page();
}
答案 1 :(得分:0)
返回Page()之前;调用 OnGet();
OnGet(你的网址); 返回页面();