You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core编辑视图(Edit.cshtml)中实现动态远程验证?

在ASP.NET Core动态编辑视图中实现远程验证

1. 为模型属性添加远程验证特性

修改Category模型的Name属性,添加[Remote]特性,指定验证的控制器、动作方法、请求方式,同时配置额外字段用于编辑场景排除当前记录:

public partial class Category
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [UIHint("Hidden")]
    public int Id { get; set; }

    [Required]
    [MaxLength(40, ErrorMessage = "名称不能超过40个字符")]
    [Remote("CheckNameExists", "Category", HttpMethod = "POST", 
           ErrorMessage = "该名称已存在,请输入其他名称",
           AdditionalFields = "Id")]
    public string Name { get; set; }

    public int Order { get; set; }

    [UIHint("Checkbox")]
    public bool IsActive { get; set; }
}

2. 完善动态视图的远程验证属性生成

在Edit.cshtml的GetValidationAttributes方法中,补充RemoteAttribute所需的URL和额外字段属性,确保客户端能正确发起验证请求:

if (property.GetCustomAttribute<Microsoft.AspNetCore.Mvc.RemoteAttribute>() is Microsoft.AspNetCore.Mvc.RemoteAttribute remote)
{
    attributes.Add("data-val='true'");
    attributes.Add($"data-val-remote='{remote.ErrorMessage ?? $"{displayName} 已被使用。"}'");
    attributes.Add($"data-val-remote-type='{remote.HttpMethod}'");
    // 生成验证请求的完整URL
    var url = new UrlHelper(HttpContext).Action(remote.Action, remote.Controller);
    attributes.Add($"data-val-remote-url='{url}'");
    // 添加额外字段(如ID,用于编辑时排除当前记录)
    if (!string.IsNullOrEmpty(remote.AdditionalFields))
    {
        attributes.Add($"data-val-remote-additionalfields='{remote.AdditionalFields}'");
    }
}

3. 在控制器中实现远程验证动作方法

在CategoryController中添加处理远程验证的动作,检查名称是否重复(编辑时跳过当前记录):

[AcceptVerbs("Get", "Post")]
public IActionResult CheckNameExists(string name, int id)
{
    // 新增场景id为0,编辑场景传入当前记录ID以排除自身
    var exists = _context.Categories
        .Any(c => c.Name.Equals(name, StringComparison.OrdinalIgnoreCase) && c.Id != id);
    
    // 返回true表示验证通过(名称可用),false表示验证失败(名称已存在)
    return Json(!exists);
}

4. 确保客户端验证脚本已引入

在布局页或Detail.cshtml中引入jQuery验证相关依赖脚本,远程验证需要这些库支持:

<script src="~/lib/jquery/jquery.min.js"></script>
<script src="~/lib/jquery-validation/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

5. 适配自定义表单提交逻辑(可选)

如果使用了自定义的handleFormSubmit方法,确保提交前先触发客户端验证:

function handleFormSubmit(form, actionUrl) {
    // 先执行客户端验证,不通过则终止提交
    if (!$(form).valid()) {
        return false;
    }
    // 后续表单提交逻辑...
}

内容的提问来源于stack exchange,提问作者Patel Sahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:04:49