VS10中有关ClientID属性的小BUG

VS10中有关ClientID属性的小BUG

      

    前几天用VS08写了个程序,因为临时有事儿程序没执行就关了,后来不小心直接用VS10打开了,结果程序执行出现错误了,刚开始以为程序本身写的有问题,找了半天原因最后发现是VS10本身的一个小Bug,写出来和大家分享一下,免得学习.Net同学也遇到相同问题而耽误时间。     程序本身很简单,用ListView实现商品信息的增删改,在<InsertItemTemplate>和<EditItemTemplate>模板中实现在单价文本框或数量文本框发生onblur事件时让总金额文本框自动显示计算结果。在ListView的ItemCreated事件中先取得单价数量文本框,TextBoxPriceTextBox= (TextBox)e.Item.FindControl("PriceTextBox"); TextBoxCountTextBox= (TextBox)e.Item.FindControl("CountTextBox");TextBoxAmountTextBox= (TextBox)e.Item.FindControl("AmountTextBox");

之后动态的给CountTextBox设置onblur事件:CountTextBox.Attributes["onblur"];让它等于一段字符串: CountTextBox.Attributes["onblur"] ="CountTextBoxBlur(this,'"+PriceTextBox.ClientID+"','"+AmountTextBox.ClientID+"')";一开始就是像上面这么写的,因为使用Repeater的时候就是这么实现一些功能的,可没想到程序执行存在问题,倒不是程序出现异常崩溃了,而是AmountTextBox文本框自动显示计算结果这个效果显示不出来,反反复复检查代码,也没发现问题,最后查看网页的源文件才发现,PriceTextBox和AmountTextBox渲染到客户端的ID分别是ListView1_PriceTextBox和ListView1_AmountTextBox,而PriceTextBox.ClientID和AmountTextBox.ClientID却是ctrl3_PriceTextBox和ctrl3_AmountTextBox,也就是说PriceTextBox和AmountTextBox的ClientID属性在控件渲染到客户端的时候发生错误了,和控件在客户端实际的ID不相同,这样在js的CountTextBoxBlur函数中肯定取不到当前控件,也就不会出现想要的结果了。但我又把代码复制到VS08中执行一遍,发现并没有VS10中这样的现象,08中PriceTextBox和AmountTextBox的ClientID和控件在客户端实际的ID就是一样的。这就是Vs10中的Bug,准确说应该是在.Net4.0中使用ListView时会出现控件的ClientID属性值和控件在客户端实际的ID不相同这种Bug,而使用Repeater和GridView就不存在这样的Bug。至于ListView中控件的ClientID属性是以什么方式渲染到客户端的这就不知道了。

    我是这么解决的。

    PriceTextBox.ClientID的值为ctrl3_PriceTextBox,而PriceTextBox在客户端实际的ID是ListView1_PriceTextBox,把ctrl3_换成ListView1_问题就解决了,当然这是为了单纯的实现效果才这么写的,就把字符串改成"CountTextBoxBlur(this,'"+"ListView1_PriceTextBox" + "','"+"ListView1_AmountTextBox" + "')";就可以了。可这么写就需要去查看源文件中控件渲染的ID到底是什么,之后再回来写代码。其实还有一种方法,之所以寻找控件渲染到客户端的ID就是为了取到当前控件,之后进行Dom操作,那么可以把控件的ClientID属性值动态的设置给控件的一个新属性,对于当前控件,这个新属性就唯一标识控件了,可以取名ID1或者ID2,这都无所谓,之后在客户端脚本的CountTextBoxBlur函数中用jQuery对其进行操作就可以了,Dom应该不行了。

 

    希望其他同学在使用ListView控件时注意控件ClientID属性值和控件渲染到客户端的实际ID是不一样的这个小Bug。免得调试程序花掉太多时间。。。。很烦人。。。。烦人。。。。烦。。。。

转载于:https://www.cnblogs.com/lhqNet/archive/2013/05/30/3108348.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值