我们知道制作一个控件,一般比只实现同样功能的模块要复杂,因为我们需要考虑更多的异常和适应性,才能达到我们整合和复用代码的效果。而当我们开发一个asp.net控件时,不管我们的控件有多么复杂的功能和ui表现,我们最终在客户端浏览器里得到的都只是html代码和脚本的组合。
而就是这些控件生成的html代码,它们的格式是不是就可以随意处理呢。那么不能随意又是什么意思?难道我们必须要保证html代码的排版,并保持html良好的层次缩进什么的吗?这里刚刚相反,我们因该尽量去掉和控件html代码没有关系的任何东西,包括"无用的"空格和回车。为什么要强调无用的呢?我们知道浏览器在处理html源代码时,对于其中连续的空格和回车,都是按一个空格来处理并显示的。所以,似乎我们并不用在意asp.net控件在render时,html代码前后或中间多出的无用空格或回车。那么我们来看一下下面这个示例: <img id="analysischart" src="chartpic_000007.jpeg?b9fa64e7-2020-4430-aaf4-b20a51794909" usemap="#usemap_analysischart">
<map id="usemap_analysischart">
<area>...<area>
</map>
'www.knowsky.com
上面这个代码片断是dundas web controls中的web chart控件输出的html代码。这个带有hot area的chart图片在使用时似乎没有什么问题,如果就是普通的单独使用这个chart,确实是没有问题。可是当我们把dundas chart组合到自定义的webcontrol中时,它这种带有换行和缩进的html代码就带来问题了。由于布局的需要,我需要把这个chart放入一个表格之中,并让表格显示一个像素的border紧密包围chart。本来这个chart的外观就只是一个图片而已,这样的组合似乎应该没有任何问题,可实际情况是那个chart的图片始终不能撑满外面的表格(如下图),而在图片底部和表格底边上总是有3-4个像素的间隙。而这个间隙就是由于<img />和<map>之间有空格和换行(虽然ie只当它是一个空格)造成的。
由于dundas web chart是发布的已经编译好的dll,所以要删除它输出的html中无用的空格和回车就变的比较麻烦了。我们只能从它的render流中把html代码取出,然后手动的去掉tags之间的空格和回车,再输出到新控件的输出流中去。这样的方法虽然可以解决一部分问题,可是如果遇到内部控件过于复杂,这时不管在正确性还是效率上就都是额外的负担。
所以从上面的问题我们看出,当我们制作一个asp.net控件时,因该让最后呈现的html代码遵循"代码紧凑原则",以提高控件的适应性。在这样的原则下先前那个示例就应该这样:
<img id="analysischart" src="chartpic_000007.jpeg?b9fa64e7-2020-4430-aaf4-b20a51794909" usemap="#usemap_analysischart"><map id="usemap_analysischart"><area>...<area></map>
这样一来chart图片就和包围它的表格边框紧密挨在一起了。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器