ASP.NET Core 2.1 Razor页面返回页面,带有模型

时间:2018-10-07 22:12:41

标签: c# asp.net-core razor-pages

我正在使用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”,并传递给表单。

  1. 正确:如果我创建的用户没有验证错误(ModelState有效),则使用“ testlink”调用LocalRedirect(returnurl)。
  2. 错误:如果我创建的用户存在验证错误(ModelState无效),则将返回return Page()。问题在于,在这种情况下,页面是用空模型生成的(@ Model.ReturnUrl为空)。用户可以在表单中看到验证错误并进行更正,但是在提交表单时,他不会重定向到“ testlink”,因为它丢失了。

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

谢谢!

2 个答案:

答案 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(你的网址); 返回页面();