网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > C# > 扩展 ASP.NET 的客户端验证  

扩展 ASP.NET 的客户端验证

2008-06-24  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

        1. 起因
        在商业应用中,很多应用都迁移到B/S架构下,但客户从传统的C/S应用过渡而来,希望尽可能多的保留C/S架构下的操作体验,尤其是一些客户友好的提示及帮助功能。对于输入验证,通常的客户要求包括:

中国网管论坛bbs.bitsCN.com

        以弹出对话框的方式提示错误信息;
        提示错误信息后能将输入焦点聚焦到相应的输入控件;
        考虑到系统的性能及用户体验,开发时我们希望能够在页面中尽可能多地完成可以进行的输入验证,避免提交到后台产生的性能问题、流量问题及提交产生的页面刷新(AJAX可以使用局部刷新)。ASP.NET提供了强大的客户端验证机制,但并不能完全满足上面的需求。 网管u家u.bitsCN.com

        2. 扩展方式
        自己开发一套独立的客户端验证机制是一件费时费力的工作,鉴于ASP.NET已经提供了一套相对完备的验证机制,因此解决问题的切入点是在现有的ASP.NET验证机制的基础上添加额外的功能。

网管u家u.bitsCN.com

        客户端验证既然在浏览器里实现,必然是由一段客户端脚本来完成的。对应到ASP.NET平台上,客户端验证有一个专用的脚本文件validate.js。对于该文件的链接,由IIS在生成页面时自动根据页面上有没有验证控件来生成的。在ASP.NET 1.1下,该文件包含在IIS的某特定目录下,在ASP.NET 2.0下,该文件通过资源引用的方式包含在页面文件中。脚本如下(中间参数省略):

中国网管联盟bitsCN.com

        <script src="/OA2007/ScriptResource.axd?... " type="text/javascript"></script>

网管网www.bitscn.com

        在validate.js中,包含了所有客户端验证所需要的脚本,其中验证的总控制流程函数为 Page_ClientValidate(validationGroup),下面为脚本,其中添加的脚本为扩展处理(脚本对应于ASP.NET 2.0,ASP.NET 1.1 处理方式相同)。

        view plaincopy to clipboardprint?
        function Page_ClientValidate(validationGroup) {
            Page_InvalidControlToBeFocused = null;
            if (typeof(Page_Validators) == "undefined") {
                return true;
            } 中国网管联盟bitsCN.com

            var i;
            for (i = 0; i < Page_Validators.length; i++) {
                ValidatorValidate(Page_Validators[i], validationGroup, null);
            }
            ValidatorUpdateIsValid();
            ValidationSummaryOnSubmit(validationGroup);
            Page_BlockSubmit = !Page_IsValid; 网管联盟bitsCN@com

            // added -- start
            var errormsg;
            var errorcontrol;
            errormsg = "";
            errorcontrol = "";

网管联盟bitsCN_com

            if ( ! Page_IsValid ) {
                for ( i = 0 ; i < Page_Validators.length ; i++ ) {
                    if ( ! Page_Validators[i].isvalid ) {
                        if ( errormsg == "" ) {
                            errorcontrol = Page_Validators[i].controltovalidate;
                            errormsg = Page_Validators[i].errormessage ;
                        } else 网管联盟bitsCN_com
                            errormsg += "\n" + Page_Validators[i].errormessage ;
                    }
                }
            }
            if ( errorcontrol != "" ) {
                alert( errormsg ) ;
                eval( "document.all['" + errorcontrol + "'].focus()" )
            }
            // added -- end

网管联盟bitsCN_com

            return Page_IsValid;
        } 网管bitscn_com

中国网管联盟bitsCN.com

        该段脚本遍历验证控件,将所有未通过的错误信息合并起来,弹出提示框,并将焦点聚焦到第一个失败的验证控件上。使用方式如下: 网管bitscn_com

        在ASP.NET 1.1环境下,可将脚本文件覆盖IIS目录下的对应文件;
        在ASP.NET 2.0环境下,可将脚本文件放在项目目录下,在页面最后声明引用(JavaScript后声明脚本覆盖前声明脚本);如果使用master页面那只需在master页面中声明引用即可;
        如果不需要显示验证控件本身,请将验证控件的Display属性设置为None;
        上面只是我们根据自己的项目需要所进行的扩展,事实上既然validate.js成为我们完全可以自行控制的脚本,那么进行什么样的扩展将成为你完全的自由。 网管bitscn_com

        3. Java中的有趣尝试
        在我们的某Java产品中,我们参照ASP.NET的客户端验证机制,通过JSP页面上的自定义标签,结合validate.js脚本,非常方便地实现了一种独立的客户端验证机制(我们不想过份依赖Java下特定平台的特定处理模式,后台验证我们有其他实现机制)。虽然这不是一种正统的JSP验证方式,不过也是一种有趣的尝试。 网管网www.bitscn.com


TAGs
 上一篇:实现DataGridView中行的上下移动   下一篇:C#邮件发送程序
扩展 ASP.NET 的客户端验证 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: