我之前对RequiredFieldValidator的印象是类似的,它们会显示错误标签并将Page.IsValid设置为false,就是这样。这意味着他们将剩余的任务(防止使用错误的输入数据)留给您。但今天我已经意识到如果你使用DetailsView将新记录插入数据库,并使用验证器检查DetailsView中的TextBox,它们会自动阻止数据库的更新。
我想知道这是如何在幕后实现的。我猜它在Validator.PreRender事件中中止了页面生命周期,因此无法访问后期的数据库连接?我可能错了。
我正在尝试使用Reflector进入RequiredFieldValidator以查看它是如何实现的,但我真的不知道在哪里看。有人可以提供一些提示吗?
答案 0 :(得分:1)
本文详细介绍了ASP.NET的验证。
http://msdn.microsoft.com/en-us/library/aa479045.aspx
验证可以是服务器端和/或客户端。如果使用,客户端验证不允许用户在验证之前提交表单。客户端验证是使用JavaScript和DOM实现的。每个提交按钮都由框架连线,以便在回发之前检查验证。
服务器端验证的工作方式不同。事件链在页面加载和事件过程调用之间扩展。验证结果已设置,可由任何事件过程解释。
在你的情况下,我猜你有客户端验证 - 它会阻止Form被提交给服务器,这就是没有对数据库进行实际更新的原因。
编辑:DetailsView控件确实支持服务器端验证控件。请点击此链接了解详情http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx#security