ASP.NET控件开发之"代码紧凑原则"

简介:
我们知道制作一个控件,一般比只实现同样功能的模块要复杂,因为我们需要考虑更多的异常和适应性,才能达到我们整合和复用代码的效果。而当我们开发一个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>

    上面这个代码片断是Dundas Web Controls中的Web Chart控件输出的HTML代码。这个带有hot area的Chart图片在使用时似乎没有什么问题,如果就是普通的单独使用这个Chart,确实是没有问题。可是当我们把Dundas Chart组合到自定义的WebControl中时,它这种带有换行和缩进的HTML代码就带来问题了 。由于布局的需要,我需要把这个Chart放入一个表格之中,并让表格显示一个像素的border紧密包围Chart。本来这个Chart的外观就只是一个图片而已,这样的组合似乎应该没有任何问题,可实际情况是那个Chart的图片始终不能撑满外面的表格(如下图),而在图片底部和表格底边上总是有3-4个像素的间隙。而这个间隙就是由于<img />和<map> 之间有空格和换行(虽然IE只当它是一个空格)造成的
    
Chart Image


    由于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图片就和包围它的表格边框紧密挨在一起了


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
人工智能 芯片
D1net阅闻|OpenAI员工疯狂暗示,内部已成功开发ASI?被曝训出GPT-5但雪藏
D1net阅闻|OpenAI员工疯狂暗示,内部已成功开发ASI?被曝训出GPT-5但雪藏
|
11月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
459 0
|
Linux API C#
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
255 9
|
Web App开发 前端开发 调度
一款基于 .NET + Blazor 开发的智能访客管理系统
一款基于 .NET + Blazor 开发的智能访客管理系统
233 8
|
前端开发 JavaScript C#
基于.NET8+Vue3开发的权限管理&个人博客系统
基于.NET8+Vue3开发的权限管理&个人博客系统
221 7
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
570 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
326 7
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
409 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
316 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
334 0