讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 ASP.NET Core MVC 中实现前端重复数据校验

千丽小哥_8383

千丽小哥_8383

发布时间:2026-10-16 10:28:02

|

615人浏览过

|

来源于php中文网

原创

如何在 ASP.NET Core MVC 中实现前端重复数据校验

本文介绍如何在 asp.net core mvc 项目中通过 javascript 在前端实时检测课程名称与费用组合的重复性,避免提交重复数据,并给出可直接集成的健壮校验逻辑与注意事项。

本文介绍如何在 asp.net core mvc 项目中通过 javascript 在前端实时检测课程名称与费用组合的重复性,避免提交重复数据,并给出可直接集成的健壮校验逻辑与注意事项。

在 ASP.NET Core MVC 应用中,仅依赖后端数据库唯一约束(如 UNIQUE INDEX)虽能防止数据重复插入,但用户体验较差——用户需等待表单提交、服务端验证、再返回错误提示。更优实践是在前端提交前即时校验重复项,提升响应速度与交互友好度。

你当前的 isDuplicateEntry 函数逻辑正确,但实际未生效,常见原因包括:

  • ✅ projects 数组未正确定义或未在 addProject() 执行前完成初始化;
  • ✅ projects 数据未随页面加载动态更新(例如未从后端 API 或视图模型同步最新列表);
  • ✅ 字段名不一致(如后端模型为 CourseName / Fee,而前端 JS 使用 coursename / fee,大小写或命名不匹配);
  • ✅ projects 是空数组或未声明,导致循环不执行,始终返回 false。

✅ 正确实现步骤

1. 确保 projects 数据已就绪

推荐在 Index.cshtml 底部,使用 Razor 将服务端数据安全注入到 JS 变量中(避免 XSS,自动 JSON 转义):

<script>
    // 从 ViewBag 或 Model 安全注入项目列表(假设 Model.Projects 是 List<Project>)
    const projects = @Html.Raw(Json.Serialize(Model.Projects));

    // 验证是否成功加载(开发时建议添加)
    console.log('Loaded projects:', projects);
</script>

⚠️ 注意:确保 Model.Projects 包含完整字段(如 CourseName 和 Fee),且命名与 JS 中访问一致。若 C# 属性为 CourseName,JS 中应写 project.CourseName,而非 project.coursename(JavaScript 区分大小写)。

前端设计优化skill
前端设计优化skill

前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。

下载

立即学习“前端免费学习笔记(深入)”;

2. 优化 isDuplicateEntry 函数(增强鲁棒性)

function isDuplicateEntry(coursename, fee) {
    // 类型安全:强制转为字符串和数字,避免 '200' !== 200
    const normalizedCourse = String(coursename).trim();
    const normalizedFee = Number(fee);

    return projects.some(project => 
        String(project.CourseName).trim() === normalizedCourse && 
        Number(project.Fee) === normalizedFee
    );
}

✅ 使用 Array.prototype.some() 替代 for 循环,语义更清晰;
✅ 添加 .trim() 和类型转换,避免空格、字符串数字等隐式比较陷阱;
✅ 返回布尔值,符合函数命名意图。

3. 完整 addProject() 集成示例

function addProject() {
    const coursename = $('#name').val().trim();
    const fee = $('#fee').val().trim();

    // 基础非空校验
    if (!coursename || !fee) {
        alert("课程名称和费用不能为空");
        return;
    }

    // 重复校验(关键步骤)
    if (isDuplicateEntry(coursename, fee)) {
        alert("重复条目:相同课程名称与费用已存在,请修改后重试。");
        return;
    }

    // 构建提交数据(注意字段名与后端模型严格一致)
    const data = {
        CourseName: coursename,
        Fee: parseFloat(fee) // 确保传数字类型
    };

    $.ajax({
        type: 'POST',
        url: '/Projects/Create', // 替换为你的实际 Action 地址
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data),
        success: function (response) {
            getall(); // 刷新列表
            alert(isNew ? "数据添加成功!" : "数据更新成功!");
        },
        error: function (xhr) {
            const errorMsg = xhr.responseJSON?.Message || "操作失败,请检查网络或联系管理员";
            alert("提交异常:" + errorMsg);
        }
    });
}

? 补充建议:前后端双重校验更可靠

前端校验可提升体验,但不可替代后端校验。务必在 Controller 中添加服务端去重逻辑(如查询数据库是否存在相同 CourseName + Fee 组合),并在 ModelState 中添加错误:

// ProjectsController.cs
[HttpPost]
public IActionResult Create([FromBody] Project project)
{
    if (_context.Projects.Any(p => p.CourseName == project.CourseName && p.Fee == project.Fee))
    {
        ModelState.AddModelError("", "该课程名称与费用组合已存在。");
        return BadRequest(ModelState);
    }
    _context.Projects.Add(project);
    _context.SaveChanges();
    return Ok(new { success = true });
}

✅ 总结

  • 前端重复校验的核心是确保 projects 数据源真实、及时、字段名匹配;
  • 使用 trim() 和类型标准化避免“看似相同实则不同”的误判;
  • 永远坚持“前端体验优化 + 后端安全兜底”双策略;
  • 开发阶段善用 console.log(projects) 和浏览器调试器验证数据流。

通过以上调整,你的 addProject() 将真正具备即时重复拦截能力,显著提升用户操作效率与系统健壮性。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2483

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5343

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6390

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5978

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

843

2024.05.22

js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

4886

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

1209

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

4824

2023.07.04

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn