RequiredFieldValidator如何自动停止正在更新的数据库?
我之前对RequiredFieldValidator和类似的印象是,它们向你展示一个错误标签并将Page.IsValid设置为false,就是这样。这意味着他们将剩下的任务(防止使用错误的输入数据)留给你。但今天我已经意识到,如果使用DetailsView向数据库插入新记录,并使用验证程序检查DetailsView内的TextBox,它们将自动阻止数据库的更新。RequiredFieldValidator如何自动停止正在更新的数据库?
我想知道这是如何在幕后实施的。我猜测它在Validator.PreRender事件中中止了页面生命周期,以至于后面的数据库连接无法到达?我可能是错的。
我想使用Reflector来获取RequiredFieldValidator的内部,看看它是如何实现的,但我真的不知道在哪里看。有人可以提供一些提示吗?
本文解释了ASP.NET的详细验证。
http://msdn.microsoft.com/en-us/library/aa479045.aspx
验证既可以是服务器侧和/或客户端。如果使用,客户端验证不允许用户在验证之前提交表单。客户端验证使用JavaScript和DOM实现。在回发之前,每个提交按钮都由框架连线以检查验证。
服务器端验证的工作方式不同。事件链在页面加载和事件过程调用之间进行扩展。验证结果已设置,可以通过任何事件过程进行解释。
在你的情况下,我想你有客户端验证 - 它阻止表单提交给服务器,这就是为什么没有实际更新数据库。
编辑:DetailsView控件确实支持服务器端验证控件。按照此链接的细节http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx#security
嗨,我已禁用JavaScript在我的浏览器和服务器端验证负责自动防止数据库更新。 – Aperture 2010-11-08 02:07:34
在这种情况下,您应该将DataView.EnableModelValidation属性设置为True。如果您将其设置为False,验证应该停止工作。 – Faheem 2010-11-08 02:20:08
嗨,我已禁用EnableModelValidation和数据库仍未更新,这意味着EnableModelValidation不负责这一点。 – Aperture 2010-11-08 03:20:26