由于运行时限制,我正在使用较早版本的ASP.NET AJAX,因此在更新面板中放置ASP.NET验证器不起作用。是否有一个技巧可以使这些工作成功?还是我需要使用AJAX工具包附带的ValidatorCallOut控件?UpdatePanel中的ASP.NET验证器
回答
我怀疑你正在运行的.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之后不久。微软推出了一种在SP1中注册脚本的新机制,并将真正的验证器类改为使用该机制而不是旧版本。
让我给你上的变化的一些细节:
传统上,你应该通过页面的方法,如Page.RegisterStartupScript()和Page.RegisterClientScriptBlock()注册脚本。问题是这些方法不是为扩展性设计的,UpdatePanel无法监视这些调用。
在SP1中,页面上有一个名为Page.ClientScripts的新属性对象。这个对象有一些方法来注册与原来的脚本是等价的(在某些方面更好)。此外,UpdatePanel可以监视这些调用,以便它在适当的时候重新渲染或调用方法。较旧的RegisterStartupScript()等方法已被弃用。他们仍然工作,但不在UpdatePanel中。
没有理由(除了政治,我想)不更新您的安装到.NET 2.0 SP1。 Service Pack包含重要的修复程序。
祝你好运。
@jmein
其实问题是,里面放置一个UpdatePanel时(UpdatePanel的刷新使用.innerHTML,这增加了脚本节点为文本节点,没有脚本节点验证客户端脚本的不工作,所以浏览器不会运行它们)。
此修复程序是由微软发布的修补此问题的修补程序。我在Google的帮助下找到了它。
http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx
@Jonathan Holland:使用Validators.dll有什么问题?
由于它们会替换原始类,因此您正在悄悄绕过微软未来可能发布(或可能已经发布)的任何错误和安全修复程序,增强功能等。除非仔细看看web.config,否则您可能永远不会注意到您正在跳过修补程序。
当然,你必须评估每种情况。如果你绝对坚持使用.NET 2.0 RTM,那么Validators.dll总比没有好。
如果什么都原因而无法使用ASP.NET验证控件的udpated版本其实很容易给自己验证验证组,所有你需要做的就是调用
Page_ClientValidate("validationGroupName");
然后您可以使用PageRequestManager根据需要执行验证。
明确使用更新的验证控件是要走的路,但我很偏向于JavaScript;)
- 1. asp.net的UpdatePanel和验证器问题
- 2. 具有验证控件的ASP.NET 3.5 UpdatePanel。验证运行意外
- 3. 嵌套UpdatePanel验证
- 4. jQuery验证和UpdatePanel的,
- 5. ASP.NET验证器
- 6. 使用UpdatePanel外部的按钮验证UpdatePanel中的控件
- 7. 文本框控件验证在GridView的内部的UpdatePanel C#ASP.Net
- 8. asp.net “比较验证器” 验证
- 9. ASP.NET - 验证自定义验证器
- 10. ASP.NET验证器在鼠标上验证
- 11. Javascript验证覆盖ASP.NET验证器
- 12. ASP.NET验证器和jQuery的
- 13. ASP.NET UpdatePanel中的HelpBallon.js
- 14. 如何创建与UpdatePanel一起使用的自定义asp.net验证器?
- 15. asp.net中的服务器端验证
- 16. Asp.net中的日期验证器
- 17. asp.net中下拉列表的验证器
- 18. ASP.NET 2.0中的服务器端验证
- 19. 在ASP.Net中的AJAX日期验证器
- 20. ASP.net中的自定义验证器
- 21. HTML 5验证器标注中的验证组,如Asp.Net
- 22. 如何使用ASP.Net中的验证器动态验证年份?
- 23. 使用验证器控件验证asp.net中的日期字段
- 24. 使用asp.net验证器验证2个字段中的1个
- 25. 通过UpdatePanel调用导致ASP.NET验证(css)不显示
- 26. UpdatePanel中的计时器问题Asp.net C#
- 27. ASP.NET AJAX服务器控件中的UpdatePanel
- 28. 服务器端验证asp.net
- 29. ASP.NET验证服务器端
- 30. ASP.NET服务器验证
谢谢!我的一台服务器显示了这种行为,实际上,它缺少sp1。 – edosoft 2008-11-02 19:40:30