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" 并传递给表单。
- 正确:如果我创建一个没有验证错误的用户(ModelState 有效),那么 LocalRedirect(returnurl) 会被调用 "testlink".
- 错误:如果我创建的用户存在验证错误(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 页面();
我正在使用 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" 并传递给表单。
- 正确:如果我创建一个没有验证错误的用户(ModelState 有效),那么 LocalRedirect(returnurl) 会被调用 "testlink".
- 错误:如果我创建的用户存在验证错误(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 页面();