【问题标题】:ASP.NET Core 2.1 Razor page return Page with modelASP.NET Core 2.1 Razor 页面返回带有模型的页面
【发布时间】: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”并传递给表单。

  1. 正确:如果我创建一个没有验证错误的用户(ModelState 有效),则 LocalRedirect(returnurl) 会使用“testlink”调用。
  2. 错误:如果我创建的用户出现验证错误(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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    返回页面之前();调用 OnGet();

    OnGet(你的网址); 返回页面();

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2020-02-09
      • 2020-04-01
      • 2019-02-27
      • 2018-11-26
      • 2019-05-06
      • 2018-12-20
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多