从后面的代码中使用 Page.Validate() 时,我遇到了验证器未触发的问题(没有显示预期的错误消息)。验证器放置在 Ajax 更新面板中。
似乎有可下载的 Ajax 版本的验证器。我不确定我是否需要这些,或者 VS 2008 SP1 是否已经拥有它们。当通过按钮发布表单时,验证器会工作,但当我按需执行 Page.Validate() 时它们不会。
从后面的代码中使用 Page.Validate() 时,我遇到了验证器未触发的问题(没有显示预期的错误消息)。验证器放置在 Ajax 更新面板中。
似乎有可下载的 Ajax 版本的验证器。我不确定我是否需要这些,或者 VS 2008 SP1 是否已经拥有它们。当通过按钮发布表单时,验证器会工作,但当我按需执行 Page.Validate() 时它们不会。
是的,验证器确实在 UpdatePanel 中工作,但您至少需要使用 ASP.NET 2.0 的 SP1。如果您使用 SP1,则不需要也不应该使用验证器的“ajax 版本”。
有关此主题的更多详细信息,请参见此处:
我不想强制更新。在某些情况下,我想在用户更改某些表单元素的值时验证某些表单元素。当我的用户更改说单选按钮或下拉列表时,会发生自动回发。当回发发生时,我希望验证控件像我点击提交按钮一样触发。
这些导致回发的控件已打开“原因验证”。另一个测试是在导致回发的控件的事件处理程序中,我有一个 Page.Validate()。
问题是为什么按钮回发会触发验证,而不是另一个导致回发的控件?
也许我们可以从顶部拿走它。你能回答这些吗?
请注意,您的验证器必须位于更新后的 UpdatePanel 中,以便它们显示错误消息。如果它们不在更新的 UpdatePanel 中,则验证器无法更改它们在浏览器上的外观。
我最终使用了一个自定义验证器,并在后面的代码中进行了自己的验证,并设置了自定义验证器的错误消息。这样我就有了更大的灵活性并且它奏效了。使用 Ajax,感觉就像是客户端验证。
您是否在更新面板上调用了更新?
它们不久前被包含在 .Net 框架的更新中,所以是的,你在 VS2008 SP1 中有它们。我发现了一个问题,即 CustomValidators 的服务器端方法会触发两次而没有“邪恶”效果,但除此之外它们工作正常。
至于您遇到的具体问题,也许验证器不在更新面板内,或者其他面板最终被发布的任何控件刷新,而不是您想要的控件?或者甚至在某个地方定义了一些 ValidationGroups 并且只有这些最终被验证?不看代码很难说。
但是确保显示您的验证器很容易:MyUpdatePanel.Update() 将强制刷新。