UpdatePanel中的ASP.NET验证器

时间:2008-08-28 17:04:00

标签: asp.net asp.net-ajax updatepanel

由于运行时限制,我使用的是旧版本的ASP.NET AJAX,在更新面板中放置ASP.NET验证程序不起作用。是否有一个技巧可以使这些工作,或者我是否需要使用AJAX工具包附带的ValidatorCallOut控件?

4 个答案:

答案 0 :(得分:21)

我怀疑您正在运行.NET 2.0的原始版本(RTM)。

直到2007年初,验证器控件与UpdatePanels不兼容。这是通过.NET Framework的SP1解决的。

问题的根源是UpdatePanel可以检测页面中的标记更改,但无法正确跟踪脚本。验证器严重依赖脚本。在部分回发期间,脚本要么被吹走,要么没有更新,或者在它们出现时不运行。

在早期的测试版中,MS让UpdatePanel尝试猜测需要重新渲染或运行的脚本。它不能很好地工作,他们不得不把它拿出来。

为了解决当前的问题,Microsoft在一个名为Validators.DLL的新DLL中发布了一个修补版本的验证器类,并提供了如何告诉ASP.NET使用这些类而不是真实类的说明。如果您使用Google获取该DLL名称,则应该可以找到更多信息。另请参阅This blog post

这是一个停止措施,你应该不使用它 尽可能避免

问题的真正解决方案是在.NET 2.0 SP1之后不久发布的。 Microsoft引入了一种在SP1中注册脚本的新机制,并将真正的验证器类更改为使用该机制而不是旧机制。

让我告诉你一些有关变化的细节:

传统上,您应该通过Page.RegisterStartupScript()和Page.RegisterClientScriptBlock()等Page方法注册脚本。问题是这些方法不是为可扩展性而设计的,而UpdatePanel无法监视这些调用。

在SP1中,页面上有一个名为Page.ClientScripts的新属性对象。该对象具有注册与原始脚本等效(并且在某些方面更好)的脚本的方法。此外,UpdatePanel可以监视这些调用,以便在适当时重新呈现或调用方法。旧的RegisterStartupScript()等方法已被弃用。它们仍然有效,但不在UpdatePanel内。

没有理由(我认为除了政治之外)没有将您的安装更新到.NET 2.0 SP1。 Service Pack带有重要的修复。

祝你好运。

答案 1 :(得分:3)

  

@Jonathan Holland:使用Validators.dll有什么问题?

由于它们取代了原始类,因此您正在悄悄地绕过Microsoft未来可能发布的任何错误和安全修复程序,增强功能等(或者可能已经发布)。除非你仔细查看web.config,否则你可能永远不会注意到你正在跳过补丁。

当然,你必须评估每种情况。如果你绝对不使用.NET 2.0 RTM,那么Validators.dll总比没有好。

答案 2 :(得分:2)

@jmein

实际上问题是Validator客户端脚本在放置在updatePanel内部时不起作用(UpdatePanels刷新使用.innerHTML,它将脚本节点添加为文本节点,而不是脚本节点,因此浏览器不会运行它们)

修复程序是微软发布的一个补丁修复了这个问题。我是在谷歌的帮助下找到的。

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

答案 3 :(得分:-1)

如果由于某种原因您无法使用udpated版本的ASP.NET验证器控件实际上很容易自己验证验证组,您只需要调用

Page_ClientValidate("validationGroupName");

然后您可以根据需要使用PageRequestManager执行验证。

绝对使用更新的验证控件是可行的方法,但我非常偏爱JavaScript;)