我最近迁移到 VS 2022 和 .Net 7.0(从 .Net Core 3.1)并且在使用 GET 访问显示模板(页面)中的模型时遇到问题。我不确定这是否与迁移部分有关,但是当我发布页面时,调试器中的模型值就在那里,但是当我使用 GET 时,该值为空?
这是我在 UserNewRegisterTest.cshtml.cs 中的精简代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using LimitedPlay.Areas.User.Models;
namespace LimitedPlay.Areas.User.Pages
{
public class UserNewRegisterTestModel : PageModel
{
[BindProperty]
public UserEditSP UserEditSP { get; set; }
[BindProperty]
public string StringTest { get; set; }
public IActionResult OnGet()
{
UserEditSP UserEditSP = new UserEditSP();
UserEditSP.NewPassword = "NewPwd";
StringTest = "Test";
return Page();
}
public IActionResult OnPost()
{
UserEditSP UserEditSP = new UserEditSP();
UserEditSP.NewPassword = "NewPwd";
StringTest = "Test";
return Page();
}
}
}
和 UserNewRegisterTest.cshtml:
@page "/Register/NewTest"
@model LimitedPlay.Areas.User.Pages.UserNewRegisterTestModel
@{
ViewData["Title"] = "Register (New User)";
}
因此,当我在调试器中浏览 UserNewRegisterTest.cshtml 并查看“this.Model”时,这是使用 GET 显示的内容:
为什么 UserEditSP 模型显示为空?
当我编辑现有记录时(我从数据库中检索记录并通过按钮发布页面),一切都很好,包括在 Startup.cs 中设置的密码选项(即 options.Password.RequireNonAlphanumeric = true;)。
此外,我不确定这是否重要,但我正在使用 Identity 和 EF Framework 来抵制/登录用户。我创建了自己的 Register.cshtml 页面,对于本地帐户,我想将模型验证与 JQuery validate.js 和 validate-unobtrusive.js 一起使用。为了彻底,我还将所有 NuGet 包升级到最新的 7.0.4 版本。
正如我所说,它在通过 POST 编辑现有记录时效果很好,但是当我尝试使用 GET 和 UserEditSP UserEditSP = new UserEditSP();它在页面上显示为空。我在这里错过了什么?
任何帮助将不胜感激。 干杯... :)
附言我发现这个 Razor Pages on async Get 模型为 null 并尝试了与 public ... OnGet() 的各种组合,但模型始终为 null。