当前位置: 首页 > news >正文

asp.net core mvc之模型绑定、特性约束模型绑定、模型验证(服务器/客户端/远程)

一、不用模型绑定

数据类型都是string 

1、UserController.cs

public class UserController : Controller
{public IActionResult Register(){return View();}[HttpPost]public IActionResult DoRegister(){//不用模型绑定  以前的方法取表单数据或Url的参数//数据类型都是stringstring s1 = HttpContext.Request.Form["name"];string s2 = HttpContext.Request.Query["id"];return View();}
}

2、Register.cshtml

@{ViewData["Title"] = "注册";
}<form method="post" action="/User/DoRegister?id=22"><input type="text" name="name" placeholder="请输入用户名"/><br/><input type="password" name="password" placeholder="请输入密码"/><br/><input type="password" name="comfirmpassword" placeholder="请输入确认密码"/><br/><input type="submit" value="提交" />
</form>

二、简单数据类型绑定

可以指定数据类型,比如id 我们可以指定int

表单数据的name 一定要和参数的名称一致

 public IActionResult DoRegister(string name,string password,string comfirmpassword,int id)

三、复杂数据类型绑定

把数据绑定到一个实体类型的属性

1、创建UserInfo实体

    public class UserInfo{private int id;private string name;private string password;private string comfirmpassword;public int Id { get => id; set => id = value; }public string Name { get => name; set => name = value; }public string Password { get => password; set => password = value; }public string Comfirmpassword { get => comfirmpassword; set => comfirmpassword = value; }}

2、UserController.cs控制器修改

 public IActionResult DoRegister(UserInfo userInfo)

四、特性约束模型绑定

1、UserInfo.cs 模型

//增加这个标注 则这个属性不会被绑定
[BindNever] 
public int Id { get => id; set => id = value; }//增加这个标注 则这个属性必须被绑定,如果没绑定 控制器中 ModelState.IsValid==false
//将 用户名输入框注释,可测试这个标注
[BindRequired]
public string Name { get => name; set => name = value; }

2、Register.cshtml 视图,将 用户名 输入框注释掉

3、UserController.cs 控制器 

        public IActionResult DoRegister(UserInfo userInfo){if (ModelState.IsValid==false){string message=ModelState.Root.Children[0].Errors[0].ErrorMessage;}return View();}

五、模型验证 - 服务器端

模型 UserInfo.cs

[StringLength(maximumLength:15,MinimumLength =6)]//字符最小长度6,最大长度15
public string Name { get => name; set => name = value; }[Required] //必填
public string Password { get => password; set => password = value; }[Compare("Password")] //比较验证
public string Comfirmpassword { get => comfirmpassword; set => comfirmpassword = value; }

其他验证

[Required];必填的属性。
[Compare]:验证模型中的两个性是否匹配
[StringLength]:验证字符串属性的最大长度

[RegularExpression]:验证数据是否与指定的正则表达式匹配
[EmailAddress]:验证属性是否为电子邮件格式
[Phone]:验证属性是否为电话号码格式
[Range]:验证属性值是否在给定范围内
[Url]:验证属性是否为网址格式 

六、模型验证 - 客户端

客户端验证是通过js挡住普通用户,危险用户可以能会把js去掉。所以客户端验证是不安全的。
客户端验证可以减轻服务器端的压力。

1、在 Register.cshtml 视图中,添加 js文件。js导入顺序不能颠倒

2、在 Register.cshtml 视图,指定强视图

@model FirstCoreMvc.Models.UserInfo

3、在 Register.cshtml 视图,使用 bootstrap框架 ,完整代码如下:

@model FirstCoreMvc.Models.UserInfo
@*指明视图使用那一个实体*@<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script><form method="post" action="/User/DoRegister?id=22">@* 先学习bootstrap框架 *@<div class="form-group"><label asp-for="Name" class="col-md-2 control-label"></label><div class="col-md-10"><input asp-for="Name" class="form-control" /><span asp-validation-for="Name" class="text-danger"></span></div></div><div class="form-group"><label asp-for="Password" class="col-md-2 control-label"></label><div class="col-md-10"><input asp-for="Password" class="form-control" /><span asp-validation-for="Password" class="text-danger"></span></div></div><div class="form-group"><label asp-for="Comfirmpassword" class="col-md-2 control-label"></label><div class="col-md-10"><input asp-for="Comfirmpassword" class="form-control" /><span asp-validation-for="Comfirmpassword" class="text-danger"></span></div></div><input type="submit" value="提交" />
</form>

4、UserInfo.cs 模型

[Required(ErrorMessage = "用户名必填")] //必填
[StringLength(maximumLength: 15, MinimumLength = 6,ErrorMessage ="用户名长度必须6-15字符")]
[Display(Name = "用户名")]
public string Name { get => name; set => name = value; }[Required(ErrorMessage ="密码必填")] //必填
[Display(Name = "密码")]
public string Password { get => password; set => password = value; }[Compare("Password", ErrorMessage ="{0}和{1}必须一样")] //比较验证
[Display(Name = "确认密码")]
public string Comfirmpassword { get => comfirmpassword; set => comfirmpassword = value; }

效果:

七、远程验证

 有些验证需要用到数据库里的数据。如:验证用户名是否已经注册了。

1、UserInfo.cs 模型

在Name属性添加 [Remote("方法","控制器")] 标注

[Remote("VerifyName","User")]
public string Name { get => name; set => name = value; }

2、UserController 控制器添加 VerifyName 方法

public IActionResult VerifyName(string name)
{if (name == "aaaaaa"){return Json(data: $"{name}已经被注册");}else{return Json(data: true);}
}

相关文章:

asp.net core mvc之模型绑定、特性约束模型绑定、模型验证(服务器/客户端/远程)

一、不用模型绑定 数据类型都是string 1、UserController.cs public class UserController : Controller {public IActionResult Register(){return View();}[HttpPost]public IActionResult DoRegister(){//不用模型绑定 以前的方法取表单数据或Url的参数//数据类型都是s…...

AI诈骗防范:保护数字社会的安全前线

引言&#xff1a; 在当今数字化的时代&#xff0c;人工智能技术在各个领域都展现了巨大的潜力&#xff0c;然而&#xff0c;正是这些技术的广泛应用也催生了新的安全隐患。近期&#xff0c;AIGC在聊天、写作、绘画、编程等领域表现出色&#xff0c;但也被用于“AI换脸”、“AI换…...

(待完善)python学习参考手册

这里写目录标题 观前浅谈:学习路线 :学习心得笔记:Step1:简单但一问不知怎么的组织语言去回答的小问题:什么是提示符?python解释器是什么?请正在阅读本文的朋友,安装一下PyCharm以及如何进行科学的省钱:Python中的命令行模式和交互模式的区别是什么?请正在阅读本文的朋友安装…...

STM32-HAL库09-CAN通讯(loopback模式)

一、所用材料&#xff1a; STM32F103C6T6最小系统板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 串口调试助手 二、所学内容&#xff1a; 初步学习如何使用STM32的CAN通讯功能&#xff0c;在本章节主要达到板内CAN通讯的效果&#xff0c;即32发送CAN信息再在CAN接收…...

jsvascript使用dhtmlXTreeObject的loadJSONObject绘制目录树

文章目录 1&#xff0c;引入dhtmlXTreeObject的css和js文件2&#xff0c;创建一棵目录树2.1&#xff0c;let tree new dhtmlXTreeObject(id-dhtmltree-0, "100%", "100%", 0);2.2&#xff0c;设置图片根目录&#xff08;后续使用到的图片都是相对于该目录…...

LeetCode 17. 电话号码的字母组合 中等

题目 - 点击直达 1. 17. 电话号码的字母组合 中等1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 3. 知识与收获 1. 17. 电话号码的字母组合 中等 1. 题目详情 1. 原题链接 LeetCode 17. 电话号码的字母组合 中等 2. 题目要…...

《GPT与AI助手:技术进步与就业前景》

随着人工智能的迅速发展&#xff0c;像GPT&#xff08;Generative Pre-trained Transformer&#xff09;这样的自然语言处理技术已经广泛应用于各个领域&#xff0c;各个互联网公司也纷纷推出了自己的AI助手来帮助创作、交流和解决问题。这一技术的广泛应用引发了一系列关于就业…...

线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算

文章目录 1 矩阵加减和数乘2 矩阵与矩阵的乘法2.1 相乘条件&#xff1a;看中间&#xff0c;取两头2.2 相乘计算方法 3 矩阵的幂3.1 观察归纳法3.2 邻项相消法3.3 化为对角 4 判断是否可逆&#xff08;证明题或者要求求出逆矩阵&#xff09;4.1 直接观察4.2 由定义式推得4.2.1 待…...

Linux---(五)三大工具yum、vim、gcc/g++

文章目录 一、yum工具1.Linux中安装软件的方法&#xff1a;2.什么是yum?3.yum源更新 二、Linux编辑器--vim1.IDE例子2.vim&#xff08;1&#xff09;vim的常用模式及切换模式&#xff08;2&#xff09;底层模式常用命令&#xff08;3&#xff09;插入模式常用命令&#xff08;…...

网络通信TCP、UDP详解

目录 IP 和端口 网络传输中的 2 个对象&#xff1a;server 和 client 两种传输方式&#xff1a;TCP/UDP TCP 和 UDP 原理上的区别 为何存在 UDP 协议 TCP/UDP 网络通信大概交互图 IP 和端口 所有的数据传输&#xff0c;都有三个要素 &#xff1a;源、目的、长度。 怎么表…...

Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用

Flutter笔记 绘图示例 - 一个简单的&#xff08;Canvas &#xff09;时钟应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_2855…...

Bard和ChatGPT的一些比较

Bard和ChatGPT的一些比较 2023.11.8版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 选择正确的自动文本生成工具对企业至关重要。本文将详细分析谷歌 Bard 和 ChatGPT 的优缺点&#xff0c;以帮助企业做出明智的选择。无论企业关注的是客…...

centos7安装Nexus(Maven私服)与配置使用教程

之前有位大佬问我&#xff0c;他说有个第三方的Jar包&#xff0c;在idea导出库中使用&#xff0c;现在要部署上线测试&#xff0c;要如何导进去打包。 我说&#xff0c;不用那么麻烦&#xff0c;搞个Nexus私服&#xff0c;将Jar上传上去&#xff0c;然后配置Maven的setting文件…...

Azure 机器学习 - 有关为 Azure 机器学习配置 Kubernetes 群集的参考

目录 受支持的 Kubernetes 版本和区域建议的资源计划ARO 或 OCP 群集的先决条件禁用安全增强型 Linux (SELinux)ARO 和 OCP 的特权设置 收集的日志详细信息Azure 机器学习作业与自定义数据存储连接支持的 Azure 机器学习排斥和容许最佳实践 通过 HTTP 或 HTTPS 将其他入口控制器…...

使用微信小程序控制蓝牙小车(微信小程序端)

目录 使用接口界面效果界面设计界面逻辑设计 使用接口 微信小程序官方开发文档 接口说明wx.openBluetoothAdapter初始化蓝牙模块wx.closeBluetoothAdapter关闭蓝牙模块(调用该方法将断开所有已建立的连接并释放系统资源)wx.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙…...

【react hook】react hook组件中,在forEach中使用async/awati进行异步操作,为什么后面代码没有等待直接同步运行了呢?

这是因为 forEach 方法不会等待 async/await 异步操作的完成。forEach 方法是一种同步的方法&#xff0c;它会在每个迭代内部同步执行一个回调函数。当遇到 await 时&#xff0c;会立即暂停执行&#xff0c;但是 forEach 方法不会等待回调函数中的 await 异步操作完成&#xff…...

高斯过程回归 | GPR高斯过程回归

高斯过程回归(Gaussian Process Regression, GPR)是一种强大的非参数回归方法,它通过假设数据是从一个高斯过程中生成的来预测新的数据点。 高斯过程是一种定义在连续输入空间上的随机过程,其中任何有限集合的观测值都呈多变量高斯分布。 实现GPR的Python代码import numpy …...

[autojs]逍遥模拟器和vscode对接

第一步&#xff1a;启动autojs服务 第二步&#xff1a;去cmd查看ip地址&#xff0c;输入ipconfig 第三步&#xff1a;打开逍遥模拟器中的sutojs-左上角- 连接电脑&#xff0c;然后输入WLAN或者其他ip也行&#xff0c;根据自己电脑实际情况确认 此时vscode显示连接成功。我们写…...

Docker 安装与优化

一、安装Docker 1、关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 02、安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2#解释 yum-utils #提供了yum-config-manager工具 device mapper #是linux内核中支持逻辑卷…...

Wix使用velo添加Google ads tag并在form表单提交时向谷歌发送事件

往head里加代码时&#xff0c;不能看谷歌的代码&#xff0c;要看wix的代码&#xff0c;不然必定踩坑 https://support.wix.com/en/article/tracking-google-ads-conversions-using-wix-custom-code 这里的代码才对&#xff0c;因为wix搞了个velo&#xff0c;这个velo很傻x&am…...

Dify对接API、数据库、AI模型全流程详解:3小时搭建可交付智能应用(附完整YAML模板)

第一章&#xff1a;Dify低代码平台集成教程概览Dify 是一款开源的 LLM 应用开发平台&#xff0c;支持通过可视化界面快速构建 AI 原生应用&#xff08;如聊天机器人、知识库问答、自动化工作流等&#xff09;&#xff0c;同时提供标准化 API 与灵活的 SDK 集成能力。本章聚焦于…...

两道必掌握的动态规划面试题:最长回文子串 最长公共子序列

目录 一、最长回文子串&#xff08;Longest Palindromic Substring&#xff09; 题目描述 1. 暴力解法&#xff08;时间复杂度 O (n)&#xff09; 2. 中心扩展法&#xff08;时间复杂度 O (n)&#xff0c;空间 O (1)&#xff09; 核心思路 Java 代码实现 3. 动态规划解法…...

英国议会调查低能耗计算能否遏制AI电力需求激增

英国议会正在调查&#xff0c;采用根本性不同的低能耗芯片设计方案&#xff0c;能否阻止AI将英国电网变成发展瓶颈。英国科学、创新与技术委员会启动了一项专项调查&#xff0c;研究所谓的低能耗计算技术能否遏制AI驱动的电力需求持续膨胀。随着模型规模与数据量不断扩张&#…...

制造业产品编码验证终极指南:如何用any-rule提升数据准确性

制造业产品编码验证终极指南&#xff1a;如何用any-rule提升数据准确性 【免费下载链接】any-rule &#x1f995; 常用正则大全, 支持web / vscode / idea / Alfred Workflow多平台 项目地址: https://gitcode.com/gh_mirrors/an/any-rule 在制造业信息化进程中&#xf…...

Python 常用的内置函数

Python内置函数速查指南本文整理了Python常用的内置函数&#xff0c;按功能分类为&#xff1a;数学运算类&#xff1a;abs()、round()、pow()等数值计算函数类型转换类&#xff1a;int()、str()、list()等数据类型转换函数序列操作类&#xff1a;len()、sorted()、zip()等序列处…...

从一次线上NPE排查说起:Java Stream的findFirst()遇到null值到底有多坑?

从线上NPE事故看Java Stream的findFirst()陷阱&#xff1a;一场关于null的深度防御战 凌晨三点&#xff0c;电商平台的订单履约系统突然告警——核心业务接口连续抛出NullPointerException。值班工程师紧急回滚代码后&#xff0c;发现罪魁祸首竟是一行使用了findFirst()的Strea…...

AOT不是银弹,但它是你的护城河:C# 14 + Dify客户端在等保2.0三级/四级环境中的11项安全加固清单,限内部技术委员会解密

第一章&#xff1a;AOT不是银弹&#xff0c;但它是你的护城河&#xff1a;C# 14 Dify客户端在等保2.0三级/四级环境中的安全定位与战略价值 在等保2.0三级及以上环境中&#xff0c;运行时动态代码生成&#xff08;如反射调用、JIT编译、Expression Tree执行&#xff09;被明确…...

XueQiuSuperSpider实战:游资追踪与龙虎榜数据分析完整方案

XueQiuSuperSpider实战&#xff1a;游资追踪与龙虎榜数据分析完整方案 【免费下载链接】XueQiuSuperSpider 雪球股票信息超级爬虫 项目地址: https://gitcode.com/gh_mirrors/xu/XueQiuSuperSpider XueQiuSuperSpider是一款功能强大的雪球股票信息超级爬虫&#xff0c;专…...

快速免费解决B站视频无法播放问题:m4s-converter终极指南

快速免费解决B站视频无法播放问题&#xff1a;m4s-converter终极指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在B站缓存了珍贵…...

告别裸屏:用MDK5的emWin中间件快速打造你的嵌入式GUI界面(基于UCOS-II)

基于MDK5与emWin的嵌入式GUI开发实战&#xff1a;UCOS-II集成指南 第一次在已有UCOS-II工程中集成emWin时&#xff0c;我盯着屏幕上的花屏现象整整调试了两天。后来才发现是颜色转换格式配置错误——这种看似简单的细节往往成为嵌入式GUI开发中最耗时的陷阱。本文将分享如何避免…...