适用于 Core Razor 页面 ASP.Net 的客户端验证问题

Problems with client side validation working for ASP.Net Core Razor page

提问人:Levi Wallach 提问时间:11/17/2023 最后编辑:Levi Wallach 更新时间:11/17/2023 访问量:44

问:

在这里阅读了类似的问题后,我终于可以进行客户端验证了,但它有一些问题,我希望其他人能够帮助解决。这是我尝试验证的示例表单字段:

@model TCore.Pages.Administration.EditDetailsModel

                 <form asp-page-handler="post" method="post">
                    <div asp-validation-summary="All" role="alert">You received the following errors:</div><label asp-for="DetailInfo.Manufacturer">Manufacturer: </label>
                    <input id="Manufacturer"  readonly="@(Model.EditMode ? null : "readonly" )" asp-for="DetailInfo.Manufacturer" class="aspNetDisabled form-control">
                    <span asp-validation-for="DetailInfo.Manufacturer" class="formNotes formAlerts"></span><div class="btnGroup @(Model.EditMode ? "visiblyHidden" : "")">
                    <div class="btnGroup @(Model.EditMode ? "visiblyHidden" : "")">
                        <input asp-page-handler="EditDetail" formnovalidate type="submit" name="btnUpdate" value="Edit" id="btnUpdate" title="Edit">
                        <input asp-page-handler="CancelInitialEditDetail" formnovalidate type="submit" name="btnCancelInitial" value="Cancel" id="btnCancelInitial" title="Cancel">
                    </div>
                    <div class="btnGroup @(Model.EditMode ? "" : "visiblyHidden")">
                        <input asp-page-handler="SaveDetails" type="submit" name="btnSave" value="Save" id="btnSave" title="Save">
                        <input asp-page-handler="ShowDetails" formnovalidate type="submit" name="btnCancelFinal" value="Cancel" id="btnCancelFinal" title="Cancel">
                    </div>
                    <DataAnnotationsValidator />
                 </form>

在模型中,下面是相应的属性引用:

 using Microsoft.AspNetCore.Mvc;
 using System.ComponentModel.DataAnnotations;

 namespace TCore.Models
 {
     public class DetailsViewModel
     {
         [Key]
         public string Id { get; set; }
         [BindProperty]
         [Required(ErrorMessage = "Manufacturer is required")]
         public string Manufacturer { get; set; }
     }
 }

需要注意的一点是,这个表单属于部分类,我不知道这是否相关,但这是它插入的页面,至少是基本格式:

@page
 @using TCore.Components;
 @model EditDetailsModel

 @{
     ViewData["Title"] = "Edit Details";
 }

@if (Model.DetailInfo == null)
 {
   [some code that displays other things aside from the form]
 }
 else 
 {
   <partial name="_DetailsPartial" model="Model" />

   @section Scripts
   {
       <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
       <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
   }
 }

表单最初显示为只读,但顺便说一下,单击编辑按钮会删除 readonly 属性,以便表单字段是可编辑的。

问题是双重的。首先,验证摘要框仅显示帖子上是否存在验证错误。我不确定这是否是 ASP.Net 应用程序上的客户端验证的限制,但如果不是,我想修复它。

其次,也许更重要的是,客户端验证的行为很奇怪。如果我转到必填表单字段并删除内容,则不会出现验证错误。如果我随后按 Tab 键切换到下一个字段,仍然没有验证错误。然后我按 Tab 键返回,仍然没有错误,所以我输入了一些文本,没有错误,因为现在字段中又有数据了,所以我再次按 Tab 键退出它,第二次按 Tab 键返回,然后删除文本,现在,最后,我看到了一个验证错误!这就像它需要几次删除和模糊才能识别表单字段无效。生成验证错误后,我可以获取其他必填字段来生成验证错误,但前提是我之前已关注它们,否则我必须经历相同的过程。很奇怪!

我所看到的截屏视频:

Screencast of what I'm seeing

C# ASP.NET 核心 验证 razor-pages

评论


答: 暂无答案