Cancel button就属于这种情况。想象一下用户输入了非法的数据,比如忽略了product的name,然后决定他不需要保存product,然后点击了Cancel button。在这种情况下,Cancel button会触发验证控件,它会报告说缺少product的name,并阻止postback。我们的用户不得不向Product TextBox里输入一些文字然后再取消编辑。
幸运的是,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时抛出异常。虽然已经写过异常处理了,但是我们其实可以根据Page.IsValid的值在第一时间里阻止非法输入。
在UpdateCommand 的最开始加上下面的代码:
if (!Page.IsValid) return;
完成这个后,product将只在提交的数据合法时才被更新。大多数用户的非法提交会由于客户端脚本而被拒绝postback,而那些浏览器不支持JavaScript 或禁用了JavaScript 的客户会跳过客户端检查,提交非法数据。
注意:细心的读者会记起在GridView里更新数据时,我们并不需要显式的检查Page.IsValid 。这是因为GridView已经帮我们完成了这部分工作,即它只在Page.IsValid 为True时才继续更新。
第三步: Summarizing Data Entry Problems
除了上面提到的5种验证控件外,ASP.NET还包含ValidationSummary control,它用来显示那些检查到非法数据的验证控件的错误信息。这些汇总的数据可以以文本或客户端消息框的方式显示。我们现在来添加包含验证问题汇总信息的客户端消息框。
拖一个ValidationSummary 进来。由于我们将它配置为以消息框的形式显示汇总信息,所以它的位置无所谓。将 ShowSummary property设为False, ShowMessageBox property设为True.这样,所有验证的错误信息会以客户端消息框的形式显示。见图6。
图 6: 用一个客户端消息框汇总验证的错误信息
总结
本章我们学习了如何使用验证控件保证在更新开始前确保用户的输入是合法的,从而减少异常的出现。ASP.NET提供了5种验证控件来检查特定的控件的输入并报告是否合法。本章我们使用了其中的两种 —RequiredFieldValidator 和CompareValidator —来保证product的name是必填的和price是大于等于0的货币格式。
在DataList的编辑界面里加验证控件只需要简单的将它们拖到EditItemTemplate里,然后设置几个属性。默认情况下验证控件自动生成客户端验证脚本,当然也提供在postback时的服务器端验证,并将所有的结果累积保存在Page.IsValid 里。在点击Button,LinkButton或ImageButton时,可以将CausesValidation 设为False从而跳过客户端验证。在执行任何代码前,首先需要保证 Page.IsValid 为True.
目前我们学习的DataList的编辑教程都只是简单的界面— 在TextBox里显示name和price。然而编辑界面可以包含各种不同的web控件,比如DropDownLists,Calenda,RadioButtons, CheckBoxes等。我们下章会创建一个包含各种web控件的界面。
祝编程快乐!
作者简介
本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用 微软Web技术。大家可以点击查看全部教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望对大家的学习ASP.NET有所帮助。
您可能感兴趣的文章: