1

从后面的代码中使用 Page.Validate() 时,我遇到了验证器未触发的问题(没有显示预期的错误消息)。验证器放置在 Ajax 更新面板中。

似乎有可下载的 Ajax 版本的验证器。我不确定我是否需要这些,或者 VS 2008 SP1 是否已经拥有它们。当通过按钮发布表单时,验证器会工作,但当我按需执行 Page.Validate() 时它们不会。

4

6 回答 6

1

是的,验证器确实在 UpdatePanel 中工作,但您至少需要使用 ASP.NET 2.0 的 SP1。如果您使用 SP1,则不需要也不应该使用验证器的“ajax 版本”。

有关此主题的更多详细信息,请参见此处:

StackOverflow:UpdatePanel 中的 ASP.NET 验证器

于 2008-09-23T23:05:03.180 回答
1

我不想强制更新。在某些情况下,我想在用户更改某些表单元素的值时验证某些表单元素。当我的用户更改说单选按钮或下拉列表时,会发生自动回发。当回发发生时,我希望验证控件像我点击提交按钮一样触发。

这些导致回发的控件已打开“原因验证”。另一个测试是在导致回发的控件的事件处理程序中,我有一个 Page.Validate()。

问题是为什么按钮回发会触发验证,而不是另一个导致回发的控件?

于 2008-09-23T23:10:04.370 回答
1

也许我们可以从顶部拿走它。你能回答这些吗?

  • 您使用的是 .NET 2.0 SP1 或更高版本吗?
  • 您的验证器控件是在 UpdatePanel 内部还是外部?
  • 您是否在禁用 javascript 的情况下使用您的网站(不太可能)?

请注意,您的验证器必须位于更新后的 UpdatePanel 中,以便它们显示错误消息。如果它们不在更新的 UpdatePanel 中,则验证器无法更改它们在浏览器上的外观。

于 2008-09-23T23:24:22.510 回答
0

我最终使用了一个自定义验证器,并在后面的代码中进行了自己的验证,并设置了自定义验证器的错误消息。这样我就有了更大的灵活性并且它奏效了。使用 Ajax,感觉就像是客户端验证。

于 2008-09-25T04:43:23.750 回答
0

您是否在更新面板上调用了更新?

于 2008-09-23T22:21:44.703 回答
0

它们不久前被包含在 .Net 框架的更新中,所以是的,你在 VS2008 SP1 中有它们。我发现了一个问题,即 CustomValidators 的服务器端方法会触发两次而没有“邪恶”效果,但除此之外它们工作正常。

至于您遇到的具体问题,也许验证器不在更新面板内,或者其他面板最终被发布的任何控件刷新,而不是您想要的控件?或者甚至在某个地方定义了一些 ValidationGroups 并且只有这些最终被验证?不看代码很难说。

但是确保显示您的验证器很容易:MyUpdatePanel.Update() 将强制刷新。

于 2008-09-23T22:23:33.373 回答