ASP.NET [PageRemote]在Input类中失效,原因何在?
问题原因及修复方案
当把Email属性嵌套到InputModel后,[PageRemote]校验失效的核心原因是嵌套模型的参数绑定规则与原配置不匹配:
独立属性时,Email的请求参数名为Email,配合AdditionalFields = "__RequestVerificationToken"能正确传递必要参数;但嵌套到InputModel后,Email的请求参数名变为Input.Email,原配置只指定了验证令牌,没有适配嵌套模型的参数传递规则,导致AJAX校验请求无法正确携带Email参数,或后台无法完成参数绑定。
修复步骤
1. 修正[PageRemote]的AdditionalFields配置
将AdditionalFields改为"*",它会自动包含所有表单字段(包括请求验证令牌和嵌套的Input.Email),完美适配嵌套模型场景:
public class InputModel { [Required] [EmailAddress] [Display(Name = "Email")] [PageRemote( ErrorMessage = "This email is already registered", AdditionalFields = "*", // 替换原有的__RequestVerificationToken HttpMethod = "post", PageHandler = "CheckEmail" )] public string? Email { get; set; } }
2. 确认页面视图的绑定正确性
确保cshtml中的输入框正确使用asp-for绑定嵌套属性,生成符合规则的参数名:
<input asp-for="Input.Email" class="form-control" /> <span asp-validation-for="Input.Email" class="text-danger"></span>
3. 可选:优化后台校验性能
原代码中_dbcontext.Accounts.ToList().Exists(...)会将所有账户加载到内存,数据量大时性能极差,建议直接用LINQ查询数据库:
public JsonResult OnPostCheckEmail() { var valid = !_dbcontext.Accounts.Any(p => p.Email.Equals(Input.Email, StringComparison.CurrentCultureIgnoreCase)); return new JsonResult(valid); }
内容的提问来源于stack exchange,提问作者UNRE
相关产品推荐
相关产品推荐

