ASP.NET Core 2.1 Razor 页面 return 模型页面

ASP.NET Core 2.1 Razor page return Page with model

我正在使用 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">
......

行为: 我登陆这个 link 的页面: https://localhost:5028/Identity/Account/Register?returnUrl=testlink ,因此 ReturnUrl 在 OnGet() 中设置为 "testlink" 并传递给表单。

  1. 正确:如果我创建一个没有验证错误的用户(ModelState 有效),那么 LocalRedirect(returnurl) 会被调用 "testlink".
  2. 错误:如果我创建的用户存在验证错误(ModelState 无效),则会调用 return Page()。问题是在这种情况下,页面是用空模型生成的(@Model.ReturnUrl 为空)。用户看到表单中的验证错误,更正它们,但是当他提交表单时,他不会被重定向到 "testlink",因为它丢失了。

我的问题: 我用什么替换“return Page();”以便我可以纠正行为在案例 2 中描述?我试过 "return LocalRedirect("/Identity/Account/Register?returnUrl=" + returnUrl)",但这会刷新页面(清除用户输入并且不显示验证错误消息)。

谢谢!

在 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();
}

在return页面()之前;调用 OnGet();

OnGet(你的url); return 页面();