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

Posted

技术标签:

【中文标题】ASP.NET Core 2.1 Razor 页面返回带有模型的页面【英文标题】:ASP.NET Core 2.1 Razor page return Page with model 【发布时间】: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 属性 【参考方案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(你的网址); 返回页面();

【讨论】:

以上是关于ASP.NET Core 2.1 Razor 页面返回带有模型的页面的主要内容,如果未能解决你的问题,请参考以下文章

基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

有没有办法在 ASP.NET Core 2.1 中捕获对 Razor 页面不存在的自定义处理程序的 HTTP 请求?

ASP.net MVC Core Razor 页面和 Ajax JQuery

Asp.Net Core 上的 Razor 页面 - 添加了 Razor 页面但无法让页面显示

覆盖 asp.net core razor 页面中的 razor 视图

ASP .NET Core Razor 页面中的授权