快速业务通道

ASP.NET 2.0数据教程之三十九:在编辑和插入界面里添加验证控件

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
如果在编辑的时候有非法输入,不管是点Update还是Cancel button ,页面都会postback。理想的情况是,点Cancel button会返回DataList的编辑前 状态,而不管输入的值是否合法。当然由于用户的浏览器可能不支持JavaScript 或者被禁用了,在更新product信息前我们要在UpdateCommand事件处理里确保页 面的数据都是合法的。

从EditItemTemplate的UnitPrice TextBox里移除 货币符号

当使用CompareValidator的货币类型时,输入不能包含任何货币 符号,否则CompareValidator 会视为非法。然而编辑界面里的UnitPrice TextBox已经包含了一个货币符号,这就意味着用户在保存前必须手动移除它。我 们有三种方法来修补它:

配置EditItemTemplate使 UnitPrice TextBox 的值的格式不为货币.

用RegularExpressionValidator 代替 CompareValidator来检查正确格式的货币值 . 这里的挑战是用正则表达式不象用 CompareValidator 那样直接,方便,需要写一些代码。

移除所有的验证 控件,验证的功能将完全依赖于服务器端的GridView的RowUpdating事件处理。

我们这里使用第一种方法。现在UnitPrice为货币格式是由于TextBox的绑 定表达式<%# Eval("UnitPrice", "{0:c}") %>. 将 它修改为 Eval("UnitPrice", "{0:n2}")(允许两位小数 的数字)。这个可以通过点击DataList里EditItemTemplate里的UnitPrice TextBox的Edit DataBindings链接或直接修改声明语法来完成。

完成这些 后,编辑界面的price格式包含两种分隔符,逗号和句号。

注意:在移除 货币格式的时候,我发现将货币符号作为text放在TextBox前面是一种好的做法。 它会提醒用户他们不需要再输入货币符号。

修补Cancel Button

默 认情况下,验证控件生成JavaScript 在客户端执行验证。当点击Button, LinkButton, 或ImageButton时,验证控件会在页面postback之前检查。如果有非 法的数据,postback不会发生。然而对某些Button来说,这时并不需要验证数据 。在这样的情况下,取消了postback是非常讨厌的。

Cancel button就属 于这种情况。想象一下用户输入了非法的数据,比如忽略了product的name,然后 决定他不需要保存product,然后点击了Cancel button。在这种情况下,Cancel button会触发验证控件,它会报告说缺少product的name,并阻止postback。我们 的用户不得不向Product TextBox里输入一些文字然后再取消编辑。

validation logic (defaults to True). Set the Cancel Button’s CausesValidation property to False.

幸运的是, Button, LinkButton, 和ImageButton 有CausesValidation property,它可以指 明当点击Button时是否需要发起验证(默认为True)。将 Cancel Button的 CausesValidation 设为False.

在 UpdateCommand Event Handler里确保 输入是合法的

客户端的脚本是由验证控件生成的,如果用户输入非法数据 ,并点击CausesValidation属性 为True的button时将不会引起postback。然而如 果用户用户使用的是版本很低的浏览器或者禁用了对JavaScript 的支持,那么客 户端的验证将不会执行。

页面postback的时候所有的验证控件执行验证, 然后将验证报告提交给Page.IsValid property。然而,整个流程并不会被 Page.IsValid的值打断。作为开发者,我们需要保证在Page.IsValid为True的情 况下代码再继续运行。

如果禁用了JavaScript 的用户浏览我们的页,编 辑了product,在price里输入一个“太贵”的值,然后点Update button,客户端的验证将被跳过,页面会继续postback。UpdateCommand事件处理 将执行,随后在试图将“太贵”的价格转换为Decimal时抛出异常。虽 然已经写过异常处理了,但是我们其实可以根据

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号