在 .Net Core Razor 页面中使用 GET 时,显示模板页面中的模型为 NULL

问题描述 投票:0回答:0

我最近迁移到 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。

c# asp.net-core razor-pages
© www.soinside.com 2019 - 2024. All rights reserved.