ASP.NET开发两年多,谈谈对两三年工作经验的ASP.NET程序员的基本见解

📅 2026/7/5 19:01:07
ASP.NET开发两年多,谈谈对两三年工作经验的ASP.NET程序员的基本见解
我想众所周知Microsoft的东西入门都是比较简单的但是提高并不容易这也就导致了很多培训机构借此良机忽悠了大批的甚至对编程压根不知所以然的人加入.NET的开发阵营然后告诉他们包教包会包就业的三包政策。当然也有另一部分人是受过高等教育之后出来从事.NET开发工作但是他们或者也是受到了一些环境的影响在WEBFORM的开发模式中很喜欢托拉控件编辑模板之类的操作甚至不知道这些控件最终被解析成什么东西只知道我实现了而不问其所以然或者是效率如何等等。下面谈谈几点个人愚见希望能对两三年工作经验的.NET开发人员一点提醒1、Gridview之错错错我想从事ASP.NET开发工作的应当有相当一部分人是做基于信息管理系统类软件开发的这样一来可能就会经常与数据报表打交道Gridview这个东西可能就是在熟悉不过了。但是我想不通的是为什么有这么多的人喜欢用它呢我总结了这种控件的缺点如下1糟糕的编辑环境看不见TR,TD写样式也变得异常麻烦代码asp:GridView IDgvList runatserver CssClassGridViewCSS Width100% AutoGenerateColumnsFalse EmptyDataTextNo DataColumnsasp:TemplateField HeaderText行号ItemTemplateasp:Label IDlblRowId runatserver Text%# Container.DataItemIndex 1%/asp:Label/ItemTemplate/asp:TemplateFieldasp:BoundField DataFieldXXX1 HeaderTextXXX1 /asp:BoundField DataFieldXXX2 HeaderTextXXX2 /asp:BoundField DataFieldXXX3 HeaderTextXXX3 /asp:BoundField DataFieldXXX4 HeaderTextXXX4 /asp:BoundField DataFieldXXX5 HeaderTextXXX5 /asp:BoundField DataFieldXXX6 HeaderTextXXX6 /asp:BoundField DataFieldXXX7 HeaderTextXXX7 /asp:BoundField DataFieldXXX8 HeaderTextXXX8 //Columns/asp:GridView2有人甚至喜欢在模板列里面编辑我看着就一个字晕3生成糟糕的HTML标签4Gridview操作起来很不灵活这句话的意思是我想要方便的控制Table的TR,TD譬如在合并单元格等等很多问题的处理上很不方便以下是我用Repeater在处理合并单元格的问题的实例HTML部分代码asp:Repeater IDrpList runatserver EnableViewStatefalseHeaderTemplate%if (rpList.Items.Count 0){%div iddNoDataNo Data/div%}else {%tabletrthXXX1/ththXXX2/ththXXX3/ththXXX4/ththXXX5/ththXXX6/ththXXX7/th/tr%} %/HeaderTemplateItemTemplatetrtd idtdContainerNo runatserver %#Eval(ContainerNo)%/tdtd%#Eval(X1)%/tdtd%#Eval(X2)%/tdtd%#Eval(X3)%/tdtd%#Eval(X4)%/tdtd%#Eval(X5)%/tdtd idtdtotal runatserver%#Eval(X6)%/td/tr/ItemTemplateFooterTemplate/table/FooterTemplate/asp:RepeaterCS部分代码for (int i rpList.Items.Count - 1; i 0; i--){HtmlTableCell tdContainerNo_previous this.rpList.Items[i - 1].FindControl(tdContainerNo) as HtmlTableCell;HtmlTableCell tdContainerNo this.rpList.Items[i].FindControl(tdContainerNo) as HtmlTableCell;HtmlTableCell tdtotal_previous this.rpList.Items[i - 1].FindControl(tdtotal) as HtmlTableCell;HtmlTableCell tdtotal this.rpList.Items[i].FindControl(tdtotal) as HtmlTableCell;tdContainerNo.RowSpan (tdContainerNo.RowSpan -1) ? 1 : tdContainerNo.RowSpan;tdContainerNo_previous.RowSpan (tdContainerNo_previous.RowSpan -1) ? 1 : tdContainerNo_previous.RowSpan;if (tdContainerNo.InnerText tdContainerNo_previous.InnerText){tdContainerNo.Visible false;tdContainerNo_previous.RowSpan tdContainerNo.RowSpan;}tdtotal.RowSpan (tdtotal.RowSpan -1) ? 1 : tdtotal.RowSpan;tdtotal_previous.RowSpan (tdtotal_previous.RowSpan -1) ? 1 : tdtotal_previous.RowSpan;if (tdContainerNo.InnerText tdContainerNo_previous.InnerText tdtotal.InnerText tdtotal_previous.InnerText){tdtotal.Visible false;tdtotal_previous.RowSpan tdtotal.RowSpan;}}5Gridview生成的效率问题Gridview集成了这么多的东西我想在效率上应该也好不到哪里去吧。最后当然Gridview还有诸多其他问题这里就不一一列举了这里只列举几个最常见得问题让我想不通的是有些人像Repeater这么简单易用的控件为什么不用而去用Gridview这种不易掌控的控件呢2、为啥还有人用FormView有些人喜欢在设计界面的时候托一个FormView控件然后在里面放一些Textbox、Button、Label之类的服务器端控件这样在后台操作的时候可以统一绑定而后呢如果会经常有一些方法要操作FormView中的服务器端控件那么经常有些程序员会声明很多局部变量先从FormView去Findcontrol这些服务器端控件赋给这些全局变量而后去再操作这些全局变量如下CODE//声明部分private TextBox X1;private TextBox X2;private DropDownList X3;private TextBox X4;private TextBox X5;private TextBox X6;//赋值部分看到这样的CODE真是让人无语而且更让人无语的是这些人仿佛很喜欢在模板列里面编辑内容。3、疯狂的SQL 代码拼接虽然说在在MS SQL 2005以后的版本中对很长的SQL代码的执行效率比执行由这段SQL生成的存储过程的时间多的有限但是我们知道存储过程是预先编译好的存放在数据库中的你要调用它只需要传一个很短的字符串加N个参数而已。而超长的SQL代码呢你需要预先将其拼接成要执行的SQL 代码(SQL代码很长要分为很多行写)然后传到数据库中数据库要将其编译可能会编译出错你这个时候才知道然后在执行这段SQL代码。你别说我还真见到过很多人是这样写的为什么不一句存储过程了事呢改起来也很方便。4、恐怖的viewstate有些.NET程序员压根对viewstate不知其所以然甚至在用webform的过程中对其开发生成的HTML源码视而不见下面我们来看看viewstate产生的乱码