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 页面但无法让页面显示