做了几年的ASP.NET,积累了不少小技巧。但是技巧只适合于特定的环境,还不如加强对基础知识的理解与运用。下面是我的一点体会,与大家分享。

1 母版页
这个控件可以使我忘记html的iframe之类的页面框架方案,还有frameset.
asp开发中还支持<#include file=”head.asp>
现在有母版页可以轻松的以.NET的方式来进行编写页面。
1)  在母版页对应的内容页中,查找母版页中的控件 ,并给它赋值
MasterPage.FindControl(“lblTitle”)=”New Request”
2) 母版页中使用JavaScript,取到文本控件的值,验证它是否合法
’<=txtUserName.ClientID>’

2 User Control 不常用,但是有时候会用到。比如,为了统一不同用户的页面地址,把不同角色的页面放到User Control中,而在同一个页面中,根据当前登陆的用户判断,加载不同的User Control
新建立二个文件,PM.ascx, GM.ascx分别对应于角色是PM和GM时的页面,在页面中作如下判断
UserControl uc
swith(role)

{
case “PM”
   uc=(UserControl) LoadControl(“~/PM.ascx”); break;
case ‘GM” 
   uc=(UserControl) LoadControl(“~/GM.ascx”); break;
}
placeHolder.Controls.Add(uc);
placeHolder是在页面上放置的一个PlaceHolder控件。

3  数据源控件 用法举例
把数据库的字段绑定到DropDownList 控件中
<asp:DropDownList ID="ddlEndCustomer" runat="server" Width="130" DataTextField="ShortName"
      DataValueField="ShortName" DataSourceID="sqlEndCustomer">
      </asp:DropDownList>
      <asp:SqlDataSource ID="sqlEndCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:HTSystemConnectionString %>"
       SelectCommand="SELECT LTRIM(RTRIM([ShortName]))  [ShortName] FROM [Customer] "> </asp:SqlDataSource>

再来一个XmlDataSource
<asp:DropDownList ID="ddlPartResin" runat="server" Width="130" DataSourceID="xmlLedgerAcc"  DataTextField="Text" DataValueField="Value">
               </asp:DropDownList>
<asp:XmlDataSource ID="xmlLedgerAcc" DataFile="~/App_Data/PartResin.xml" runat="server"     XPath="Items/Item"></asp:XmlDataSource>
Xml文件格式如下
<?xml version="1.0" encoding="utf-8" ?>
<Items>
  <Item Text="ABS" Value="ABS"></Item>
  <Item Text="HIPS" Value="HIPS"></Item>
  <Item Text="PA" Value="PA"></Item>
</Items>

对于ObjectDataSource,用的不熟练,没有在项目开发中使用。SqlDataSource 也很少直接用于GridView的数据绑定,数据库中的数据,通常需要转换一下,用这个控件还要重新写代码,还不如直接写代码来的方便。
举例,数据库中有一个字段,smallint类型,1表示男,0表示女。用程序判断一下才可以绑定到控件中去。SQL写法如下
SELECT Sex=CASE WHEN Sex=1 THEN ‘Man’
                             WHEN Sex=0 THEN ‘Woman’
               END
FROM Employee

4  资源文件
通常要放置一些提示字符串,比如“操作成功”,“新增业务订单失败”之类的,分散在各个类中,不好管理,也不容易统一风格。用资源文件可以有效的解决这个问题
新建2个文件,Strings.aspx.en-us.resx,Strings.aspx.resx
在文件里面写明字符串资源的值的键,在页面的后台代码中调用
Bitmap img = (System.Drawing.Bitmap)GetGlobalResourceObject(
           "MyGlobal", CultureInfo.CurrentCulture.Name);
(string)GetGlobalResourceObject("MyGlobal", "GlobalText"); 
(string)GetLocalResourceObject("lbl.Text");
如代码所示,可以从全局的资源文件或局部资源文件中取出相应的资源,可以是字符串,也可以是图片

5 验证控件
<asp:TextBox ID="txtUserName" runat="server" />
  <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="RequiredFieldValidator"  Display="None"         ControlToValidate="txtUserName"></asp:RequiredFieldValidator>
验证用户名是必须输入的,否则不允许提交
如果你用了验证控件,页面上的按钮的默认属性CausesValidation=true,每一个按钮是会触发验证的。
上周帮忙同事看一个问题,如下图
 

这是选择用户的页面,点击>按钮把员工添加到右边的ListBox中去。
我的同事拷贝我的代码过去,点击>按钮,页面事件没有任何反应,debugger也不能中断。
我仔细检查他的页面代码,发现他使用了ASP.NET的验证控件,验证控件本身不显示错误提示,如代码所示Display="None"   ,把所有的验证提示放到ValidationSummary,偏偏他的代码中又没有拷贝这个控件,所以怎么也找不到问题。我告诉他把>按钮的CausesValidation设为false,按钮开始正常工作。

6  Themes用的不多,不如在CSS文件中设置方便。 
Membership虽然是可扩展的,可是MS做了那么多存储过程,关系复杂,自己很少用。
我有见过在Win Forms应用程序中,应用aspnetdb作为用户验证数据库,自己在Web开发都没有用到,居然有人在Win Forms中应用,可见它还是具有典型的意义。aspnetdb还提供了一个管理工具,可以直接添加用户,添加角色,这可以快速搭建一个角色权限数据库,验证系统用户。
Security通常是Form验证。我们公司内部局域网以域方式管理,相互信任的关系,改选用Windows验证方式,用每个电脑的Login ID作主用户名标识,当发现数据库中不存在该用户时,调出引导注册页面,让用户注册,然后管理员审核一下他的角色,赋予相应的权限就可以。

Profile也很少用,估计这东东和Portal Framework关系密切,几乎没有用。
有用户提到过一个需求,为每个输入窗体配置一些默认值,方便他快速的输入数据。因为角色是几乎不变的,要输入的数据,通常就那几个类别,我弄成DropDownList 供他选择,还不够方便,最好直接帮忙他选择一个默认值,这个默认值在80%的情况下是正确的。
估计这个功能用Profile来做会比较轻松,在新版本中考虑用这个特性来做。

6 Cache
在ASP.NET 1.1时代做过一个方案,要做一个多语言的ASP.NET应程序,把语言放置到Xml中,写成zh-cn.xml,en-us.xml,zh-tw.xml,然后在界面中读取这个文件,给界面元素赋值。
当是没有用缓存,有高人提示,这个文件的内容几乎不会变化,应该主动用文件依赖缓存,加快读取速度。
还有个争持,是用HttpContext.Cahce,还是用HttpRuntime.Cache,页面的Cache肯定是最糟糕的方案。那时我笨,也没有分清楚这两个的关系。现在你应该知道是用拿一个,否则要查一个MSDN。
上一段代码,练下手
if (Cache["key"] == null)
       {
       Cache.Insert("key", DateTime.Now, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
       }
DateTime dt = (DateTime)Cache["key"];
缓存的使用模式是要先判断是否存在,不存在要刷新缓存,否则直接取值
if(Cache[“Name”]==null)
   Cache.Insert("Name", DateTime.Now, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
txtUserName.Text=Convert.ToString(Cache[“Name”]);
当有大量的缓存键值对时,最好也做个CacheManager,统一管理键值对,减少出错。

ASP.NET 开发知识小结相关推荐

  1. asp.net 开发知识小结【转】

    做了几年的ASP.NET,积累了不少小技巧.但是技巧只适合于特定的环境,还不如加强对基础知识的理解与运用.下面是我的一点体会,与大家分享. 1 母版页 这个控件可以使我忘记html的iframe之类的 ...

  2. IbatisNet开发使用小结

    一. 介绍 平常做企业级应用,需求变化是经常的事,而很多基础代码重复也是很让人头疼的问题.所以很多人会使用一些ORM框架来增强项目的可维护性.可扩展性.IBatis.Net就是一个比较易用的ORM框架 ...

  3. 【ASP.NET开发】.NET三层架构简单解析

    这篇文章本来应该很早就写出来的,但是一直苦于自己的精神能力有限,而且已经到了我们学校的考试周,所以时间上还是有点紧迫.关键的一点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来大家 ...

  4. ASP.NET开发安全问题

    ASP.NET开发安全问题 前言:之所以想到要写ASP.NET安全问题的文章,是有感于自己的一些经历.想当初自己学习ASP.NET的时候,到处找有关安全方面的文章,当时发现很多文章指示蜻蜓点水的告诉我 ...

  5. IOS开发高手课第一篇 构建自己的IOS开发知识体系

    开篇词 | IOS开发锚定一个点,然后在这个点上深耕 你好,我是戴铭,欢迎你加入我的 iOS 开发专栏. 说起 iOS 开发,自然是绕不开 iPhone 和 App Store 这两个词.多少年过去了 ...

  6. 好程序员分享24个canvas基础知识小结

    好程序员分享24个canvas基础知识小结,非常全面详尽,推荐给大家. 现把canvas的知识点总结如下,以便随时查阅. 1.填充矩形 fillRect(x,y,width,height); 2.绘制 ...

  7. 《ASP.NET 开发从入门到精通》----2.3 编译和部署ASP.NET程序

    本节书摘来自异步社区<ASP.NET 开发从入门到精通>一书中的第2章,第2.3节,著 张明星 ,责任编辑 张 涛, 更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  8. 用 ASP.NET 开发 Web 服务的五则技巧

    (转的,作者不详) 一.禁用HTTP POST/GET协议 除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST.HTTP/GET和SOAP.之所以说"试图&qu ...

  9. unicode 编码转换漏洞_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

最新文章

  1. 阿里的御用框架,它非常牛啤!不服不行!
  2. 左右躲避障碍-神手ts版本
  3. JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
  4. 十条nmap常用的扫描命令
  5. django08: 视图与路由(旧笔记)
  6. 惊了,掌握了这个炼丹技巧的我开始突飞猛进
  7. 一个盒子相对于另一盒子垂直居中的方法
  8. ffmbc——为广播电视以及专业用途量身定制的FFmpeg
  9. tensorflow随笔——深度学习中GPU型号对比
  10. python文件同时读写_python 同时读取多个文件的例子
  11. python opencv视频流_python – PyQt显示来自opencv的视频流
  12. 【廖雪峰python教程学习】——(一)python基础
  13. ThinkPHP商城实战
  14. 自控原理学习笔记-反馈控制系统的动态模型(3)-开环、闭环特征模型
  15. cfa equity
  16. beetl模板使用场景_Beetl使用注意事项
  17. 【论文研读】基于对偶种群的约束多目标优化进化算法
  18. IBM FLEX刀箱忘记账号密码
  19. 打印机连接与计算机的,操作方法:教您如何将打印机与计算机连接
  20. 接入小程序客服(java版教程),处理第一次主动推送会话超时问题

热门文章

  1. 【 Vivado 】在工程模式下通过jou文件来学习 Tcl 命令
  2. FPGA从Xilinx的7系列学起(3)
  3. Spartan-6的存储元件、多路复用器、快速先行进位逻辑、算术逻辑
  4. Node.js使用NodeMailer发送邮件
  5. egret 发布android原生项目(一)打包apk
  6. String转XML
  7. SpringBoot实践:更换启动Logo字样
  8. 一个用户实体应该有它自己的实体验证,即一个实体应该有它的属性,方法,扩展属性及验证机制组成...
  9. 动态调用WCF不添加服务(svcutil.exe)
  10. PHP开发移动端接口(增强版)