asp.net CustomValidator ServerServer方法未激发

gg58donl  于 2023-11-20  发布在  .NET
关注(0)|答案(3)|浏览(125)

我在表单上放置了一个CustomValidator。我没有设置它的ControlToValidate属性。在它的ServerValidate事件中,我写了以下内容:

  1. protected void CustomValidator1_ServerValidate(object source,
  2. ServerValidateEventArgs args)
  3. {
  4. args.IsValid = false;
  5. }

字符串
我在这个方法上设置了一个断点,但它似乎永远不会到达那一点。但如果我在另一个表单上这样做,它就像一个魔法一样工作。
1.按钮和CustomValidatorValidationGroup属性相同
1.我尝试删除按钮和CustomValidator中的此属性,仍然不起作用。
我只是在表单上放了一个CustomValidator,除了设置它的ServerValidate事件方法外,没有触及它的任何属性。
编辑:这是aspx部分:

  1. <asp:CustomValidator ID="CustomValidator2" runat="server"
  2. ErrorMessage="This is a test"
  3. onservervalidate="CustomValidator1_ServerValidate"
  4. ValidationGroup="PA"></asp:CustomValidator>
  5. <asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px"
  6. onclick="Button1_Click" ValidationGroup="PA" />

lztngnrs

lztngnrs1#

尝试通过Page.Validate在按钮单击处理程序中强制验证:

  1. protected void Button1_Click(Object sender, EventArgs e)
  2. {
  3. Page.Validate();
  4. if(Page.IsValid)
  5. {
  6. // servervalidate should have been called
  7. }
  8. }

字符串

编辑(来自评论):

如果你想让customvalidator验证你的控件中是否没有输入/选择任何内容,你需要将ValidateEmptyText设置为true。你也可能想让CustomValidator替换RequiredFieldValidators
我假设aspx上的validator-order决定是否调用customvalidator的servervalidate,如果以前的Validator已经做了Page.IsValid=false。或者ASP.NET太聪明了,它假设SeverValidate比简单的文本为空检查成本更高。

展开查看全部
cunj1qz1

cunj1qz12#

我还想为那些同时使用CustomValidators和MyRedFieldValidators的人提供更多的帮助。应该考虑到客户端验证首先发生。服务器端验证只会在PostBack之后发生。我相信你已经明白了,但以防万一这不是很清楚:这意味着首先所有绑定到特定客户端工作验证器的控件必须有效才能让回发发生。服务器端验证消息。
因此,这里有一些方法可以使CustomVCalidators和其他内置的验证器同时工作。
1.将两组验证器设置为在客户端工作。在这种情况下,我们必须确保对于自定义验证器,我们将在客户端进行验证的脚本空间化。无需编写脚本,只需填写ServerScript方法,验证将在服务器中进行。即使EnableClientScript属性设置为True。
1.将两组验证器都设置为在服务器端工作。要做到这一点,只需将EnableClientScript设置为False。但请注意,这将加载服务器。

nwsw7zdq

nwsw7zdq3#

在现有答案的基础上:
如果已验证的控件放置在不可见的控件中(例如,如果它放置在设置为Visible = falseasp:Panel中),则不会触发验证。
要解决这个问题,我们可以暂时使其可见,例如:

  1. // assuming SomeUpdatePanel contains SomePanel
  2. SomePanel.Visible = true;
  3. SomeUpdatePanel.Update();
  4. Page.Validate();
  5. SomePanel.Visible = false;
  6. SomeUpdatePanel.Update();

字符串

相关问题