快速业务通道

关于WebForms以及一些ASP.NET开发上的经验(3)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
tElementById("<%= this.textBox.ClientID %>").value = (counter++);
    window.setTimeout(increase, 500);
  }
  increase ();
</script>

上面这段JavaScript代码的作用是每500为一个计数器加1,并且显示在文本框上。随着项目的发展, 页面上复杂的JavaScript代码会越来越多,于是我们就会想办法将其转移到js文件中并且在页面上引用它 们。使用js文件的好处很多,便于进行代码管理是一方面,但是最重要的好处之一还是对于性能的提高。 如果JavaScript代码完全写在页面上,这样每次加载页面都需要下载这些JavaScript代码,而js文件可以 缓存,这样客户端只需要在第一次加载时下载这个文件就可以了。减少了客户端与服务器之间数据通信的 大小,也就加快页面加载的速度,提高了性能。

不过问题就此出来了:为了能够正确引用到页面上的某个服务器控件生成的DOM元素,我们就必须在页 面中使用<%= %>标记来输出控件的ClientID,但是<%= %>无法写在js文件中,这可怎么办? 于是很多人着急了起来,我也不时会收到此类问题,似乎很难找到合适的解决办法。于是“客户端ID污染 ”似乎也就成了一个使用WebForms时非常严重的问题。

有些朋友会说:“这个没有问题啊,仔细观察ClientID的组成方式能够很容易找到规律的。”服务器 控件的ClientID是由自身ID和它所在的NamingContainer“树”来共同决定的,因此在理论上我们也完全 可以在设计器得到“已经放置在页面中”的某个服务器控件的客户端ID,并将其写进JavaScript代码中。 话虽如此,的确没错,但是这个解决方案实在不好,因为它违背了控件的重要特性:“复用”。作为一个 控件来说,它可能会被放在任意的NamingContainer树下,也就是说,它的客户端ID在不同的环境中并不 固定。另外,如果控件上层NamingContainer树中有任何一个的服务器端ID被修改的话,js文件中使用的 ID就需要进行改变,这样实在不利于的维护,随着项目增大,此类问题会愈发明显。

那么我们究竟该怎么做呢?

在设法解决这个问题之前,我们先来思考一下这个问题。如果我们没有使用WebForms进行开发,就在 普通的页面上编写代码,那么我们对于上面的功能会如何将其提取到js文件中呢?嗯,就直接在代码中通 过textBox这个ID来获得DOM元素吧。那么好,请您先回答我以下几个疑问:

为什么要写textBox而不是其他ID呢?

如果其他页面上有个同样需要实现的功能,而那个文本框的id是txtCounter,那么该怎么作呢?

如果一张页面上有两个文本框需要显示这样的计数器,那么又该怎么做呢?

上面的几个疑问其实只反应了一件事情,那就是这个计数器的复用性实在太差。什么叫做好的复用性 呢?那么我们来看一下一个典型的示例,MaskedEditExtender。我们来看看它是怎么做的:

<ajaxToolkit:MaskedEditExtender
  TargetControlID="TextBox1"
   Mask="9,999,999.99"
  MessageValidatorTip="true"
   OnFocusCssClass="MaskedEditFocus"
  OnInvalidCssClass="MaskedEditError"
   MaskType="Number"
  InputDirection="RightToLeft"
  AcceptNegative="Left"
   DisplayMoney="Left"
  ErrorTooltipEnabled="True" />

MaskedEditExtender的第一个属性TargetControlID,就可以决定了究竟是为哪个文本框添加效果,然 后效果的样式可以由MaskType和Mask决定,获得焦点的样式和输入错误的样式可以由OnFocusCssClass和 OnInvalidCssClass属性决定,连字符输入的顺序都可以定制。

这就是复用:爱怎么

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号