如何利用扩展方法来链式的对MVC 3中的页面进行验
在.NET 3.0中,一种被称为扩展方法的新特性为我们提供了一种更为简洁和高效的编码方式。扩展方法虽然看似只是改变了我们写代码的习惯,但如果使用得当,它却能极大提升我们的编码效率。
扩展方法的本质,其实就是对类的静态方法的调用。在C中,扩展方法的使用非常广泛,它的基本形式是在一个静态类中定义一个静态方法,并在方法参数前添加“this”关键字。下面是一个简单的扩展方法示例,为字符串添加一个“@”后缀:
```csharp
public static class Extensions
{
public static string EndWith(this string str)
{
return str + "@";
}
}
```
使用扩展方法非常简单,例如上面的代码片段,对字符串str使用EndWith扩展方法,就会在页面上显示@:
```csharp
string str = "";
Response.Write(str.EndWith());
```
本次课题的重点并非在于扩展方法本身,而在于如何利用扩展方法来链式地对MVC 3中的页面进行验证。在MVC中,我们通常使用Model验证,这是一种直接有效的方式,可以对一个字段进行多种条件的验证。但这种验证方式有一个缺点,那就是我们无法直接在页面上看到对字段进行了哪些验证,需要去到Model层查看。这在项目组分工的情况下,可能会带来沟通上的困扰。
现在,我们提供一种新的页面验证方式,它可以在客户端对一个页面元素进行多种条件的验证。这种验证方式依赖于jquery的验证插件——jquery.validation.js文件。我们还需要注意MVC 3的Razor视图继承的类。虽然Mvc 2继承自ViewPage基类,但在Razor视图下,实际上是继承自WebViewPage类。当我们开发页面方法时,需要注意类的继承问题。
下面我们先来看一下如何利用扩展方法进行链式页面验证的代码:
在MvcWeb.Extensions中,有一群默默奉献的助手类,它们为WebViewPage添加了额外的魔法。其中,JqueryHelper类便是这些助手中的佼佼者。它的出现,如同一位优雅的舞者,在MVC的舞台上翩翩起舞,为页面开发带来了更多便利。
JqueryHelper类拥有ViewContext、ViewPage和RouteCollection等属性,它们如同魔法师手中的魔法棒,为页面赋予了更多的功能。它的构造函数接收这些参数,确保它们在后续的魔法表演中能够随时使用。
其中,有一个特别引人注目的方法——ToScripts。这个方法就像是一位巧手的工匠,它精心拼接出一段段JavaScript代码,这些代码正是jquery.validation.js所需要的验证页面元素的脚本。当页面上的元素需要进行验证时,ToScripts方法就会大显身手,它根据传入的表单数据生成相应的验证规则,并将这些规则与消息序列化成JavaScript对象,最后将这些内容包装在一个jQuery的validate方法中,形成一段完整的JavaScript代码。这样,前端页面就能利用这些验证规则来保证用户输入的数据符合规范要求。
除了ToScripts方法外,还有一个JqueryExtensions类,它像是一位贴心的助手,为WebViewPage提供了一个快速访问JqueryHelper的快捷方式。通过它的Jquery方法,我们可以轻松获取到当前页面的JqueryHelper实例,从而进行更多的操作。
还有一个JqueryValidations类,它负责处理表单验证的逻辑。它拥有许多方法,如Required、Email、Number和Range等,这些方法用于添加验证规则和消息。当表单提交时,这些验证规则和消息会被转换成JavaScript代码,用于前端页面的验证。
还有一个JQueryValidationExtensions类,它提供了一些静态方法,用于方便地获取JqueryValidations实例。这样,我们就可以在页面中轻松地进行表单验证了。
概述
我们创建了一个基于Jquery的验证框架,它主要由两部分组成:一个名为JqueryHelper的辅助类和一个进行实际验证操作的JqueryValidation类。这个框架通过链式方法实现了一系列前端验证功能。每一个验证方法在完成验证操作后都会返回一个新的JqueryValidation对象,这使得我们可以轻松地进行链式调用。验证过程中的各种信息,如标签名、错误信息以及验证规则,都被存储在字典中,以便在生成提交脚本时能够拼接出正确的JS代码。
接下来让我们通过一个简单的实例来详细解释这个过程。下面是一个简单的MVC视图页面,展示了如何使用这个框架进行前端验证。在这个页面中,我们定义了一个表单,其中包含了一些需要验证的元素,如用户名、性别和电子邮件地址。通过使用JqueryValidation类的各种方法,我们对这些元素进行了必填项验证和格式验证。
注意几点实现页面验证的细节:
要成功进行验证,必须引入相关的JS文件,例如jquery.validation.js。这是整个验证过程的基础。
所有需要验证的元素必须放在form标签内。这是HTML表单的基本规则,也是前端验证能够生效的前提。
在进行链式方法验证元素时,虽然理论上验证的顺序并不固定,但出于业务逻辑考虑,我们仍然需要按照一定顺序进行验证。这样可以确保验证过程的逻辑性和准确性。
页面提交可以通过多种方式实现,如点击提交按钮、使用AJAX等。但需要注意的是,通过非传统方式提交页面可能不会触发前端JS的验证。我们需要确保通过ToScript方法生成的验证JS代码能够正确执行。在MVC框架中,会自动对生成的JS代码进行编码,因此需要特别注意这一点。如果不加注意,可能会导致生成的JS代码与预期不符。
让我们来看一下这个框架的实际效果。初始界面显示的是没有任何错误信息的普通表单。当用户尝试提交表单但某些条件不满足时,界面会显示出可定制的错误信息。这些错误信息是通过框架动态生成的,可以根据具体需求进行定制和调整。通过这种方式,我们可以为用户提供更好的用户体验,同时确保数据的准确性和完整性。在我深夜调试代码时,注意到在IE9浏览器下,偶尔会出现信息更新不及时的状况,而在火狐浏览器中则表现正常。尽管存在一些待解决的问题,但这并不影响我们的使用。在此,我想稍作停留,谈谈我们在使用链式方法时的一些心得。链式方法,在我们使用LINQ时,经常会看到它们的身影。通过链接多个方法的使用,我们提高了程序的可读性和流畅性。在设计链式方法时,一个重要的注意事项是保持所有链式方法的返回值类型的一致性。这有助于我们在不需要掌握方法调用顺序的情况下,更方便地进行操作。关于这一点,虽然有些园友可能有不同的看法,认为LINQ语法并不要求所有返回值类型都相同,但我们必须认识到,在使用LINQ时,方法的调用顺序确实至关重要。它影响着我们的代码逻辑和程序的执行流程。我想再强调一点关于扩展方法的知识。扩展方法并不是真的在原有类中添加了一个新方法,而是相当于调用静态类中的静态方法来实拟实现的功能。尽管天色已黑,我们仍在不懈努力。因为我们有着坚定的信念和毅力,相信通过我们的奋斗和努力,肯定会迎来美好的明天。在这段代码中,我们可以看到通过调用`cambrian.render('body')`来渲染页面主体部分,这体现了我们在开发过程中的细致入微和不断追求完美的精神。
网络安全培训
- 如何利用扩展方法来链式的对MVC 3中的页面进行验
- PHP获取windows登录用户名的方法
- zend framework配置操作数据库实例分析
- NodeJS 文件夹拷贝以及删除功能
- js 获取元素的具体样式信息getcss(实例讲解)
- jQuery实现可用于博客的动态滑动菜单完整实例
- JS中Json数据的处理和解析JSON数据的方法详解
- SpringMVC下获取验证码实例详解
- 学习JavaScript设计模式之迭代器模式
- 高性能PHP框架Symfony2经典入门教程
- 微信小程序 实例开发总结
- php生成静态html页面的方法(2种方法)
- JS实现图片旋转动画效果封装与使用示例
- 微信小程序简单的canvas裁剪图片功能详解
- PHP多进程编程实例
- PHP Ajax实现无刷新附件上传