登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
从事ASP.NET开发两年多,谈谈对两三年工作经验的ASP.NET ...
从事ASP.NET开发两年多,谈谈对两三年工作经验的ASP.NET程序员的基本见解
[ 复制链接 ]
觐有
2025-5-29 19:44:09
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
粗略算来,自己从事.NET开发工作2年有余,也来谈谈自己对两三年工作经验的.NET程序员的基本见解。
我想众所周知,Microsoft的东西入门都是比较简单的,但是提高并不容易,这也就导致了很多培训机构借此良机,忽悠了大批的甚至对编程压根不知所以然的人加入.NET的开发阵营,然后告诉他们包教,包会,包就业的三包政策。当然也有另一部分人是受过高等教育,之后出来从事.NET开发工作,但是他们或者也是受到了一些环境的影响,在WEBFORM的开发模式中,很喜欢托拉控件,编辑模板之类的操作,甚至不知道这些控件最终被解析成什么东西,只知道我实现了,而不问其所以然,或者是效率如何,等等。
下面谈谈几点个人愚见,希望能对两三年工作经验的.NET开发人员一点提醒:
1、Gridview之错,错,错
我想从事ASP.NET开发工作的应当有相当一部分人是做基于信息管理系统类软件开发的,这样一来可能就会经常与数据报表打交道,Gridview这个东西可能就是在熟悉不过了。但是我想不通的是为什么有这么多的人喜欢用它呢?我总结了这种控件的缺点,如下:
(1)糟糕的编辑环境,看不见TR,TD,写样式也变得异常麻烦
代码
'>
(2)有人甚至喜欢在模板列里面编辑,我看着就一个字晕
(3)生成糟糕的HTML标签
(4)Gridview操作起来很不灵活
这句话的意思是我想要方便的控制Table的TR,TD,譬如在合并单元格,等等很多问题的处理上很不方便,以下是我用Repeater在处理合并单元格的问题的实例:
HTML部分:
代码
No Data
XXX1
XXX2
XXX3
XXX4
XXX5
XXX6
XXX7
CS部分:
代码 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
.FindControl("tdContainerNo") as HtmlTableCell;
HtmlTableCell tdtotal_previous = this.rpList.Items[i - 1].FindControl("tdtotal") as HtmlTableCell;
HtmlTableCell tdtotal = this.rpList.Items
.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;
}
}(5)Gridview生成的效率问题
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产生的乱码:
这还是算小的了,数据控件在显示数量大的时候,你如果将这些东西拷贝到TXT文件中,然后看看他们的大小,是很恐怖的,虽然在开发webform过程中,很多情况下viewstate确实帮我们节省了不少开发时间,也方便我很多,但是我要说的是,根据实际情况决定你的viewstate,能禁掉就禁掉吧。
5、很喜欢到服务器端做验证(修正:应该client/Server同时验证)
在开发过程中,我们会经常遇到这样的问题,验证用户输入内容的格式正不正确,例如,用户输入个EMail,我们就需要判断输入的格式正不正确,然后有很多程序员就喜欢在CS文件中取this.txtXX.Text的内容作验证,然后弄个弹出框提示用户,殊不知这个简单的验证,还要跑到Server上做,为什么不写个JS提示一下呢,不是很简单吗?
6、不知其所以然
很多两三经验的.NET程序在开发过程中托控件托习惯了,都不知道最后控件被解析什么样子,甚至不知道自己开发的ASP.NET程序的工作流程,原理,完全被Microsoft傻瓜化了,只知道我这样做就实现了功能,却不知道你这样做为什么能实现。这是一个很恐怖的信号,希望活跃在.NET的兄弟们在开发程序的时候能知其然,知其所以然。
7、吃老本,不学习新的技术
众所周知,Microsoft的技术是更新很快的,有些人会抱怨跟不上节奏,索性不问,老是沉迷于过去式中,认为老的技术成熟,而且自己很熟悉,殊不知,这是一种退化的表现。我们应该明白,新事物的出现,肯定是为了补充旧事物的所缺少的地方,是为了更完美,更便捷的处理实际问题,我们不能一概的去否定它,而应该去了解他,学习他。Linq不是很好用吗,但是到现在还发现很多人对Linq是一知半解。
今天就写到这里吧,以上内容是我经常见到的,所以写在这里,希望给两三工作经验的程序员朋友提个醒!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
ASP
NET
从事
开发
两年
相关帖子
.NET周刊【11月第4期 2025-11-23】
.Net-Avalonia学习笔记(目录)
.NET周刊【11月第5期 2025-11-30】
.NET周刊【11月第5期 2025-11-30】
用 .NET 最小化 API 构建高性能 API
Aspire 13:从.NET 编排工具到真正的多语言云原生应用平台
Apipost分支功能:为API开发打造专属的成本控制与协作流程
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
使用DNGuard加密并打包C# .NET Core程序为单一EXE文件
强壳保护NET代码!Dnguard 4.9.4最新企业旗舰版下载地址
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
.NET周刊【11月第4期 2025-11-23】
0
156
浅皮懔
2025-12-15
业界
.Net-Avalonia学习笔记(目录)
0
197
恙髡
2025-12-16
业界
.NET周刊【11月第5期 2025-11-30】
0
374
背竽
2025-12-16
业界
.NET周刊【11月第5期 2025-11-30】
1
1005
闻成
2025-12-16
业界
用 .NET 最小化 API 构建高性能 API
0
1019
科元料
2025-12-17
业界
Aspire 13:从.NET 编排工具到真正的多语言云原生应用平台
0
63
劳欣笑
2025-12-17
业界
Apipost分支功能:为API开发打造专属的成本控制与协作流程
1
671
刎唇
2025-12-17
业界
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
0
949
欤夤
2025-12-18
安全
使用DNGuard加密并打包C# .NET Core程序为单一EXE文件
1
740
嫁吱裨
2025-12-19
业界
强壳保护NET代码!Dnguard 4.9.4最新企业旗舰版下载地址
1
767
庞悦
2025-12-19
回复
(4)
喳谍
2025-11-10 18:25:23
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
余思洁
2025-11-26 17:34:10
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
肿圬后
2025-12-4 08:47:14
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
热心回复!
欤夤
2025-12-11 00:00:30
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
觐有
2025-12-11 00:00:30
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
1002
Kali2025.4+Cherry Studio一键配置HexStrik
414
PHP 之高级面向对象编程 深入理解设计模式
411
PHP 之高级面向对象编程 深入理解设计模式
568
升级curl版本,及升级后引起的动态库链接不
292
2025年GEO优化服务商全景对比:五大核心维
779
AI Agent详解
983
Buildah 简明教程:让镜像构建更轻量,告别
609
OceanBase 在滴滴大规模运维经验以及新功能
975
[CSS+]HTML Learn Data Day 2
96
掌握相关性分析:读懂数据间的“悄悄话”
138
嵌入式UI框架-抗锯齿画圆弧算法
935
嵌入式UI框架的渐变原理、渐变算法
219
日本股票 API 对接实战指南(实时行情与 IP
562
解决Docker磁盘空间告急:认识并清理“悬空
394
别再只会算直线距离了!用“马氏距离”揪出
530
企业进行信息化后,一定会提高效率吗?真相
516
n8n整合ffmpeg
492
从random随机数看验证码重复数字
525
OceanBase 向量索引优化指南
233
Vue2中能否实现输入中文自动转化为拼音, 且