【发布时间】:2019-03-12 14:22:44
【问题描述】:
我正在使用 ASP.NET Core 2.1 创建身份服务器。我使用 Asp Identity 并搭建了登录和注册页面。
我有以下页面:
[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”并传递给表单。
- 正确:如果我创建一个没有验证错误的用户(ModelState 有效),则 LocalRedirect(returnurl) 会使用“testlink”调用。
- 错误:如果我创建的用户出现验证错误(ModelState 无效),则调用 return Page()。问题是在这种情况下,页面是使用空模型生成的(@Model.ReturnUrl 为空)。用户在表单中看到验证错误并进行更正,但是当他提交表单时,他不会被重定向到“testlink”,因为它丢失了。
我的问题:我应该用什么替换“return Page();”,以便我可以纠正案例 2 中描述的行为?我尝试了“return LocalRedirect("/Identity/Account/Register?returnUrl=" + returnUrl)”,但这会刷新页面(清除用户输入并且不显示验证错误消息)。 p>
谢谢!
【问题讨论】:
-
在 POST 上设置
ReturnUrl属性
标签: c# asp.net-core razor-pages