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