首页 > 解决方案 > ASP.NET Core Razor 页面表单输入验证不起作用

问题描述

因此,我正在开发一个理论上足够简单的带有用户帐户的问卷调查应用程序,并且我正在尝试验证用户输入。例如,在这里我试图将名字字段设为必填。我遵循了一些教程,它应该很简单,但我必须遗漏一些东西。当我检查我的模型状态是否有效以重新加载页面或发布数据时,我收到一条错误消息,告诉我这些字段是必需的,即使我已经为它们提供了一个值。为了清楚起见,我删除了一些不重要的代码部分。这里似乎有什么问题?

CreateAdmin.cshtml

@page
@model ResumePostingService.Pages.CRUD.CreateAdminModel
@{
    ViewData["Title"] = "Create Admin";
    Layout = "~/Pages/SharedPages/_Layout_Admin.cshtml";
}

<div>
    <h2>@Model.Messages</h2>
</div>

<h2>Add a new Admin Record</h2>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Admin.FirstName" class="control-label">First Name</label>
                <input type="text" asp-for="Admin.FirstName" class="form-control" />
                <span asp-validation-for="Admin.FirstName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-success" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-page="/Admin_Pages/Admin_Index" class="btn btn-danger">Cancel</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

创建Admin.cshtml.cs


namespace ResumePostingService.Pages.CRUD
{
    public class CreateAdminModel : PageModel
    {
        private readonly ResumePostingService.Models.ResumePostingServiceDatabaseContext _context;

        public CreateAdminModel(ResumePostingService.Models.ResumePostingServiceDatabaseContext context)
        {
            _context = context;
        }

        readonly DataAccessClass objadmin = new DataAccessClass();

        [BindProperty]
        public Admin Admin { get; set; }

        public string Messages { get; set; }

        public IActionResult OnGet()
        {
            if (HttpContext.Session.GetInt32("Admin Id") == null)
            {
                return RedirectToPage("/SharedPages/Unauthorized");
            }
            else
            {
                return Page();
            }
        }

        public ActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                Messages = string.Join("; ", ModelState.Values
                                        .SelectMany(x => x.Errors)
                                        .Select(x => x.ErrorMessage));

                return Page();
            }

            objadmin.AdAddAdmin(Admin);

            return RedirectToPage("/Admin_Pages/Admin_Index", new { actres = 4 });
        }
    }
}

管理员.cs

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ResumePostingService.Models
{
    public partial class Admin
    {
        public Admin()
        {
        }

        [Key]
        public int AdminId { get; set; }

        [Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the name")]
        [StringLength(20, MinimumLength = 2, ErrorMessage = "Password cannot be longer than 20 characters and less than 2 characters")]
        public string FirstName { get; set; }
 
    }
}

标签: c#asp.net-mvcasp.net-corerazor-pages

解决方案


推荐阅读