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