手机版

ASP.NET没有魔力 NET MVC模型验证方法

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

在前一篇文章中,介绍了用户注册和登录功能。注册用户时,可以以代码的形式限制用户名和密码的格式。如果不符合要求,操作无法完成,如下图所示:

这个函数的原理是基于Identity的Entity Framework组件在添加用户之前验证用户提交的数据后给出的错误消息。

数据验证功能在每个软件系统中都是非常必要的。为了避免用户输入的无效或非法数据造成系统错误,需要在处理或持久化之前对数据进行验证,以确保其正确性和有效性。

本文将从以下几个方面介绍ASP.NET MVC中的模型验证机制:

输入验证

验证简介。网

ASP中MVC的后端模型验证。网

ASP中MVC的客户端模型验证。网

ASP中MVC的客户端验证。网

定制ASP.NET MVC中的模型验证

输入验证

输入验证的目的是判断一个变量是否能满足规定的要求。既然这里提到了“判断”,那么使用程序实现它最直接的方法就是通过判断语句来完成,比如:

但是有没有统一的方法来验证数据。Net?否则每次通过判断语句写验证码既不能重用,也不能影响阅读。

验证简介。网

英寸Net中,提供了一种基于特征的数据标注和验证机制。

1.数据类型的标记:

有一个名为system的类库。中的componentmodel.dataannotations。Net,它包含许多属性。这些属性用于标记中属性的数据类型信息。网络类型。例如数据长度、格式、可空性等。

下图显示了类库中的一些类型,从中可以看到信用卡、电子邮件地址和最大/最小长度等特征类型:

有三种类型的数据注释属性,它们是:

验证特征:用于执行验证规则,如电子邮件地址、数据类型、数据长度、数字间隔、正则表达式等验证特征。

显示功能:用于指定标记的类型或属性在UI上的显示方式。

模型关系特征:用于指定类成员与其他类型的关系,如外键特征。

下图显示了通过属性标记实体类型的名称属性的结果。从标记的名称可以很容易地看出,名称属性是必需的,最大长度是30,显示的名称是“name”。

但是,应该注意的是,系统提供的功能。组件模型。数据注释只是一种描述。因为您限制了字符串的长度,所以不可能分配超过限制的字符串。它必须手动调用验证方法,或者在ASP.NET MVC和EF中使用它。(见:https://stackoverflow.com/questions/6496705/how-do-data-annotations-work)

请参阅:https://mdsn . Microsoft.com/en-us/library/system.component model . data annotationaspx了解dataannotations提供的功能类型。

2.数据类型的验证

用数据属性标记一个类型后,需要通过一个特殊的验证类型,系统中也存在。componentmodel.dataannotations程序集,称为Validator。下图显示了验证器的定义。根据其描述,此类用于验证用ValidationAttribute属性标记的类型、属性和方法:

3.类型验证示例

使用控制台程序演示如何在中使用数据验证。Net:

首先,创建一个Console程序,并添加系统的引用。componentmodel.dataannotations程序集,然后编写以下代码:

运行后将输出以下错误消息:

添加显示属性后:

优化的验证提示信息:

4.自定义身份验证方法:

系统内置的数据验证特性都是从ValidationAttribute类型继承而来的,所以我们可以通过继承这个类型来实现自己的数据验证方法:

首先,添加一个继承ValidationAttribute的类型,并重写其IsValid方法,该方法包含数据验证的逻辑并设置相应的错误消息:

然后将此功能应用于相应的类属性:

验证结果:

有关自定义身份验证功能,请参考https://msdn.microsoft.com/en-us/library/cc668224.aspx

ASP中MVC的模型验证。网

ASP。NET MVC提供了基于特征标签的模型验证功能。只要在作为动作参数的类型属性中加入相应的数据验证特性,ASP.NET MVC在绑定模型时就会自动验证标记的属性。验证结果由控制器中模型状态的有效属性反映。

以下是如何在ASP.NET MVC中向模型添加数据验证:

1.用特征为Model的属性进行标记,如必填项、密码类型和属性之间的比较等。

2.添加模型状态。对动作代码进行有效的判断,当发生错误时,通过ModelState对象的AddModelError方法将错误信息携带到视图中:

3.使用Html。验证在视图中输出验证信息的简单方法:

注意:如果View中有任何用于客户端验证的代码,应该首先注释掉@ scripts . render(~/bundles/jqueryval)。该文件用于客户端验证,这将在后面描述。

4.使用页面上的Html对象根据模型生成相应的html标签

5.运行程序

输入一个空用户名和两个不匹配的密码,然后单击提交:

显示身份验证失败:

页面上输出了什么:

6.使用显示功能优化属性名称的输出:

执行结果:

ASP中MVC的客户端模型验证。网

以上介绍了ASP.NET MVC服务器的模型验证。当数据提交到服务器时,它可以在业务逻辑之前过滤无效的数据请求,但它仍然需要将请求发送到服务器。当请求太多的时候,这些无效的请求会占用大量的服务器资源,所以如果能够在客户端完成相应的验证,对于客户来说响应速度会有所提升。服务器方面,压力减轻,ASP.NET MVC结合Jquery Validation插件提供浏览器端数据验证功能。

然后,在上述代码的基础上,通过在页面中引入验证相关的javascript来实现客户端验证:

1.添加以下代码并介绍与验证相关的Js代码:

2.使用Html对象的ForXXX方法生成视图上模型对应标记的Html代码:

3.操作效果:

结果与服务器端验证一致,但点击注册按钮后,Post请求不再发送到服务器,而是通过js代码在浏览器中完成数据验证。

ASP中基于MVC的客户端验证Jquery验证。网

Jquery Validation是Jquery的一个插件,提供了强大的表单数据验证功能,可以简单快速的为Web应用添加一些常用的数据验证,比如必填、号码、邮件、电话号码、正则表达式等常用格式验证。它的验证功能是通过在表单的标签中添加一些属性或设置其类型来完成的。如下图所示,代码来自官方文档,提供长度限制、必填项、Email格式和Url格式的验证:

有关Jquery验证的更多信息,请参考文档:https://jqueryvalidation.org/documentation/

不引人注目的Javascript

不引人注目的Javascript可以翻译成非侵入式的Javascript,其目的是将HTML和Javascript分开。换句话说,HTML中没有JavaScript代码,它们只有引用关系。这样不仅可以避免代码混乱,还可以避免不同浏览器之间的兼容性。

ASP。NET MVC通过在HTML中的标签中插入data-val*等属性来标记对应的标签,然后引入的js通过读取这些特殊的标签来完成具体的功能。下面是通过HTML生成Html。方法的文本框:

从代码中可以看出,除了输入标签的正常属性外,还会生成以data-val为前缀的相关属性,这些属性将用于辅助js代码完成数据验证。

关于@ scripts . render(~/bundles/jqueryval '):

首先,Scripts对象的Render方法用于将指定的脚本文件路径添加到页面,其参数是表示脚本文件路径的字符串数组。

那么~/bundles/jqueryval指向哪个文件呢?

在ASP.NET的MVC中,提供了一种捆绑技术,可以用来合并和压缩JavaScript和css文件。bundle的配置一般在App_Start目录下的BundleConfig.cs文件下。从下面的代码可以看出~/bundles/jqueryval代表了jquery.validate*可以匹配的所有文件:

然后将其注册到全局静态Bundle列表中,就像注册路由一样:

这样就可以使用~/bundles/jqueryval在UI上获取与身份验证相关的js文件。关于UI的更多内容将在后面的文章中介绍。

定制ASP.NET MVC中的模型验证

上面介绍了ASP.NET MVC中的模型验证,内置了一些常用的验证方法,但是在实际开发中,还是会出现不能满足需求的情况,所以需要根据实际需求定制验证,包括后端验证和前端验证。

1.添加自定义验证功能:

上述代码需要注意以下几点:

实现了ValidationAttribute类型,重写了获取错误信息的FormatErrorMessage方法和验证数据的IsValid方法。

在系统下实现了IClientValidatable接口。Web.Mvc命名空间,是ASP.NET MVC为实现客户端认证而扩展的接口。该界面用于创建并返回认证规则列表,主要包括三个属性:错误信息、认证类型和认证参数,其中错误信息在默认信息中增加“来自客户端认证”来区分服务器认证。

注意:由于客户端身份验证只是ASP.NET MVC中的一个特性,所以系统中存在一个可验证的接口。Web.Mvc程序集。

2.展开Jquery validation插件,添加一个名为myblog.validate.extension.js的验证扩展文件,给Jquery Validation添加一个新的验证方法(注意:该方法的第一个参数与GetClientValidationRules方法中设置的ValidationType属性一致),最后通过Jquery . validator . independent . adapters添加MVC和Jquery Validation之间的关联:

注意:添加关联代码时,需要添加名称与ValidationType属性一致的消息和规则。

3.将扩展的js文件引入页面:

bundleConfig.cs:

页面代码:

4.将新添加的特征应用于相应的类型属性:

5.实施结果:

摘要

数据验证对于应用程序来说是一个非常重要的功能。从本文的分析可以看出,一个数据可能在客户端进入时、服务器接收时、业务逻辑处理时进行验证,所以可能会有这些代码是否没有必要的问题,答案是否定的。首先,来自客户端的所有数据对服务器来说都是不可信的,所以无论数据是否已经在浏览器中验证过,都需要在服务器Model上进行验证。就业务逻辑而言,它是一个整体,规定了哪些数据是合法的,哪些是非法的,所以必须包含验证逻辑,否则业务逻辑的单元测试就通不过。最后,作为请求的接收者,它决定是否执行相应的业务逻辑,这是独立且相关的。

此外,本文还简要介绍了不引人注目的Javascript。非侵入式JavaScript是一个想法,除了这里的数据验证,还可以用在其他地方。下面的文章将进一步解释ASP.NET MVC如何将HTTP请求的数据绑定到模型。

以上验证方法ASP.NET无魔_ASP。NET MVC模式是边肖和大家分享的全部内容,希望能给大家一个参考和支持我们。

版权声明:ASP.NET没有魔力 NET MVC模型验证方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。