Spiga

ASP.NET AJAX正式版带来的Validator问题及解决方案

2007-01-24 15:07 by Jeffrey Zhao, 4316 visits, 网摘, 编辑

  升级到ASP.NET AJAX正式版之后,一般来说重新编译不会有什么问题,不用做什么修改,这是个好消息。不过在执行时就会出现问题了。因为在正式版的程序集中,删除了兼容UpdatePanel的Validator那些类,因此TagMapping时就无法找到需要的类了。如果您在您的项目中没有使用到那些Validator(确切地说,是没有在UpdatePanel中使用那些Validator),那么只要在web.config文件中删除下面的这个元素就可以了:

需要删除的元素
<tagMapping>
    <add tagType="System.Web.UI.WebControls.CompareValidator"
        mappedTagType="System.Web.UI.Compatibility.CompareValidator, ..."/>
    ...
</tagMapping>

 

  如果有朋友使用了这些兼容UpdatePanel的Validator,也不用着急,Matt Gibbs已经给出了解决方案。从他的文章里我们得知,那些兼容的Validator将通过Windows Update对于.NET Framework进行升级。虽然我不知道为什么要这么做,但是我们似乎只能这么接受。照目前来说,我们就要下载那些Validator,编译这个项目,并将所得的Validators.dll复制到网站的Bin目录下去。然后在web.config中configuration/system.web/pages节点中添加(或修改)如下的元素:

document.write
<tagMapping>
    <add tagType="System.Web.UI.WebControls.CompareValidator"
        mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.CustomValidator"
        mappedTagType="Microsoft.Web.UI.Compatibility.CustomValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.RangeValidator"
        mappedTagType="Microsoft.Web.UI.Compatibility.RangeValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.RegularExpressionValidator"
        mappedTagType="Microsoft.Web.UI.Compatibility.RegularExpressionValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.RequiredFieldValidator"
        mappedTagType="Microsoft.Web.UI.Compatibility.RequiredFieldValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.ValidationSummary"
        mappedTagType="Microsoft.Web.UI.Compatibility.ValidationSummary, Validators"/>
</tagMapping>

 

  总的来说,正式发布的版本修改的地方还不是很大,移植起来应该还是比较轻松的(Control Toolkit还没有尝试过)。

Add your comment

58 条回复

  1. #1楼 aspnetx      2007-01-24 15:16
    速度
      回复  引用  查看    
  2. #2楼
      
  3. #3楼[楼主] Jeffrey Zhao      2007-01-24 16:18
    @aspnetx
    金钱啊
      回复  引用  查看    
  4. #4楼[楼主] Jeffrey Zhao      2007-01-24 16:19
    @aspajax
    其实我觉得……和现在相比有很大区别吗?
      回复  引用  查看    
  5. #5楼 Jiang[未注册用户]2007-01-24 16:23
    为什么在异步提交页面时会报这个错: pagerequestmanagerparsererrorexception
      回复  引用    
  6. #6楼[楼主] Jeffrey Zhao      2007-01-24 16:37
    @Jiang
    有没有更详细的信息呢?
      回复  引用  查看    
  7. #7楼 JLive      2007-01-24 17:29
    如果使用Validation控件可以更改这个控件的EnableClientScript=false。就可以使用了。
      回复  引用  查看    
  8. #8楼[楼主] Jeffrey Zhao      2007-01-24 17:38
    @JLive
    这样就没有客户端的验证了。
      回复  引用  查看    
  9. #9楼 阿一      2007-01-24 18:40
    呵呵,老赵够快的!
    我项目还没进行升级呢,迟点再升级成正式版,现在用的还是旧版本。
    希望升级的过程不要那么痛苦!
      回复  引用  查看    
  10. #10楼[楼主] Jeffrey Zhao      2007-01-24 18:55
    @阿一
    不可能那么快上Production的,只是移植试试看,呵呵。
    具体还要再测试一下,我看了一些关键的代码,细节方面变了一些。功能上没有看出什么很多区别,不过Control Toolkit还是不清楚。:)
      回复  引用  查看    
  11. #11楼 阿不      2007-01-24 19:12
    我也看到了那篇文章了,可是我就觉得奇怪了,既然Validator在UpdatePanel不能正常使用,而上一个版本中提供的方法不是很好吗?干嘛还要去掉呢?
      回复  引用  查看    
  12. #12楼 阿不      2007-01-24 19:13
    这种方法不还一样吗?
      回复  引用  查看    
  13. #13楼[楼主] Jeffrey Zhao      2007-01-24 19:15
    @阿不
    其实现在这个Validator的Solution就是从以前的版本剥离出来的。
    据说现在要用Windows Update升级.NET Framework,不知道原因……
      回复  引用  查看    
  14. #14楼 阿不      2007-01-24 19:42
    把它当做一个BUG来修复啊?晕。
      回复  引用  查看    
  15. #15楼[楼主] Jeffrey Zhao      2007-01-24 20:10
    @阿不
    Windows Update不一定是修补bug的,呵呵。
    比如IE7,Media Player 11都是可以通过Windows Update进行更新的。
      回复  引用  查看    
  16. #16楼 马哥      2007-01-24 20:13
    UpdateProgress没有UpdatePanle时的js Bug修复了吗?
      回复  引用  查看    
  17. #17楼[楼主] Jeffrey Zhao      2007-01-24 20:24
    @马哥
    可以认为是“修复”了,现在只要EnablePartialRendering为true就一定会加载那个js,即使页面没有UpdatePanel和UpdateProgress,呵呵。
    蛮保险的做法,但是也是需要注意的,让用户下载了多余的js就不好了。
      回复  引用  查看    
  18. #18楼 Cat Chen      2007-01-24 21:18
    @Jeffrey Zhao
    UpdatePanel和UpdateProgress是用于轻量级的AJAX解决放案的,多下载js也就不是什么大问题了吧。
      回复  引用  查看    
  19. #19楼[楼主] Jeffrey Zhao      2007-01-25 00:44
    @Cat Chen
    嗯……不过还是注意些好,毕竟一个MicrosoftAjaxWebForms.js的Release版本也有几十K,呵呵。
      回复  引用  查看    
  20. #20楼
      
  21. #21楼
      
  22. #22楼 TerryLee      2007-01-25 08:23
    @Jeffrey Zhao
    昨天晚上项目升级,正好涉及到了Validator问题,这篇文章给了我极大的帮助,非常感谢!
      回复  引用  查看    
  23. #23楼[楼主] Jeffrey Zhao      2007-01-25 08:54
    @怪怪
    其实这个做法并不保险吧,无法保证在任何地方任何上网条件的人都能够访问。
    还是使用网站本身来的保险,这样能够访问的网站的人就可以正确下载脚本了。
      回复  引用  查看    
  24. #24楼[楼主] Jeffrey Zhao      2007-01-25 08:55
    @TerryLee
    我也是正好遇到,顺手写篇短文。:)
      回复  引用  查看    
  25. #25楼 发哥      2007-01-25 10:12
    我在安装调试时, 异步把数据保存到数据库后, 在更新页面的时候出现如下提示:
     
     
     

     

    有哪位朋友遇到这种提示没有?

      回复  引用  查看    
  26. #26楼[楼主] Jeffrey Zhao      2007-01-25 10:40
    @发哥
    您是怎么做的呢?有没有输出非法字符?
      回复  引用  查看    
  27. #27楼 freetofly      2007-01-25 12:03
    @赵兄
    为何照你的方法做了之后
    运行提示:
    配置错误
    说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

    分析器错误信息: 未能从程序集“Validators”中加载类型“Microsoft.Web.UI.Compatibility.CompareValidator”。

    行 39: <add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator, Validators"/>
      回复  引用  查看    
  28. #28楼[楼主] Jeffrey Zhao      2007-01-25 12:05
    @freetofly
    不会阿,这个做法很简单,没有什么特别的……
      回复  引用  查看    
  29. #29楼 发哥      2007-01-25 12:58
    @Jeffrey Zhao
    没有非法字符,数据都保存到数据库里了, 就是在更新的页面的时候提示这个错误!
      回复  引用  查看    
  30. #30楼[楼主] Jeffrey Zhao      2007-01-25 13:02
    @发哥
    您在异步postback后作了哪些事情呢?
      回复  引用  查看    
  31. #31楼 freetofly      2007-01-25 13:48
    @赵兄
    就是下来这个包,然后编译
    之后把编译过的DLL放到BIN下
    再把
    <tagMapping>
    <add tagType="System.Web.UI.WebControls.CompareValidator"
    mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.CustomValidator"
    mappedTagType="Microsoft.Web.UI.Compatibility.CustomValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.RangeValidator"
    mappedTagType="Microsoft.Web.UI.Compatibility.RangeValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.RegularExpressionValidator"
    mappedTagType="Microsoft.Web.UI.Compatibility.RegularExpressionValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.RequiredFieldValidator"
    mappedTagType="Microsoft.Web.UI.Compatibility.RequiredFieldValidator, Validators"/>
    <add tagType="System.Web.UI.WebControls.ValidationSummary"
    mappedTagType="Microsoft.Web.UI.Compatibility.ValidationSummary, Validators"/>
    </tagMapping>

    加上,把原来的tagMapping删除掉
      回复  引用  查看    
  32. #32楼[楼主] Jeffrey Zhao      2007-01-25 14:05
    @freetofly
    不清楚了……应该没有问题的阿……
      回复  引用  查看    
  33. #33楼 发哥      2007-01-25 14:38
    @Jeffrey Zhao
    正常的数据处理!没有做别的事情!
      回复  引用  查看    
  34. #34楼[楼主] Jeffrey Zhao      2007-01-25 14:42
    @发哥
    能否作一个重现问题的小示例发到我的邮箱呢?
      回复  引用  查看    
  35. #35楼 lwjj      2007-01-25 16:03
    以前还真的不知道有个专门为UpdatePanel设计的Validator。
    今天试着用了一下,终于达到了预期的效果,解决了困扰很多天的问题。
    谢谢 Jeffrey Zhao
      回复  引用  查看    
  36. #36楼 freetofly      2007-01-25 16:09
    @赵兄
    发现问题所在了
    您提供的那个项目的的命名空间为Sample
    而配置文件里的为Microsoft
    统一一下就OK了

    嘿嘿
    还有个小问题啊
    当提页面提交后/如何把提交按钮变为不可用呢?如果用客户端脚本,那验证一但不通过,那就OVER了。
    如果在服务器端执行完方法后写上Btn_Save.Enable = false;这时如果服务器端执行时间比较长,那这个基本上就不怎么起作用。
    不会非要在服务器端开多线程吧
      回复  引用  查看    
  37. #37楼[楼主] Jeffrey Zhao      2007-01-25 17:26
    @lwjj
    :)
      回复  引用  查看    
  38. #38楼[楼主] Jeffrey Zhao      2007-01-25 17:35
    @freetofly
    阿哦……我这倒没有注意。
    您可以使用JS,把按钮的disabled设为false
      回复  引用  查看    
  39. #39楼 freetofly      2007-01-25 19:16
    @赵兄
    使用客户端脚本如果有验证控件呢?
    验证失败了呢?
      回复  引用  查看    
  40. #40楼[楼主] Jeffrey Zhao      2007-01-25 20:48
    @freetofly
    那么就不会出现PostBack了。
      回复  引用  查看    
  41. #41楼[楼主] Jeffrey Zhao      2007-01-25 23:45
    @freetofly
    才发现,一定是ASP.NET AJAX的人突然改掉了,我用的时候还是Microsoft.XXX,呵呵。
      回复  引用  查看    
  42. #42楼 数据绑定者      2007-01-26 13:54
    老赵,我的也出现了这个问题,用你的方法编译过去了,但是好像UpdatePanel不工作了,还是回传给服务器了。。。

    奇怪

    还有其他地方需要注意么?

      回复  引用  查看    
  43. #43楼[楼主] Jeffrey Zhao      2007-01-26 14:53
    @数据绑定者
    没有啊,UpdatePanel工作的好好的。
      回复  引用  查看    
  44. #44楼
      
  45. #45楼[楼主] Jeffrey Zhao      2007-01-27 01:03
    @怪怪
    您是说ScriptManager的OnResolveScriptReference事件的作用吧?
    其实我的意思就是说,只有自己host的脚本才是保证能够访问的,别的都可能瘫痪之类的。虽然可能比如微软,利用优秀的fail over机制可以避免瘫痪,但是还有网络问题呢,比如有些拨号如果只能上国内呢?还有……台湾的地震呢?呵呵。所以共有的script链接感觉无甚大用,怎么做都不够保险。
    P.S. 多谢捧场。:)
      回复  引用  查看    
  46. #46楼
      
  47. #47楼[楼主] Jeffrey Zhao      2007-01-27 04:31
    @怪怪
    可能可行,不过还要在技术上进行思考,比如怎么做可以“所有共享JS库都不能用的话,就由自己的主机发送”。
    不过的确可以作为一个发展方向。:)
      回复  引用  查看    
  48. #48楼 月风[未注册用户]2007-03-15 22:28
    太兴奋了。。就是因为验证这问题让我调试了大半天一直没找到问题。。晚上回来从BAIDU搜索到此文章。。呵呵。。现在问题解决了。。兴奋啊。。
      回复  引用    
  49. #49楼 LY[未注册用户]2007-04-10 22:45
    太无私了!
    好在查到了,不然光这个问题,我就不想升级或研究AJAX了。
      回复  引用    
  50. #50楼 LY[未注册用户]2007-04-10 22:47
    感谢!
      回复  引用    
  51. #51楼 若寒      2007-04-11 22:29
    我为了解决这个问题,只好在最后放个ValidationSummary,然后设置ShowMessageBox="True".这样的话,出来的alert的确很不好看.现在终于看到了很好的解决方法.谢谢老赵!!
      回复  引用  查看    
  52. #52楼
      
  53. #53楼
      
  54. #54楼
      
  55. #55楼[楼主] Jeffrey Zhao      2008-02-21 17:08
    @poseidony
    没有出来
      回复  引用  查看    
  56. #56楼 Koy      2008-05-30 15:30
    呵呵,不错。先收藏,改天再看!
      回复  引用  查看    
  57. #57楼
      



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 629220


相关文章:

相关链接: