做了几年的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. Ambari集群移动现有复制到另外地方或更改ip地址,导致各项服务组件上为黄色问号代表心跳丢失的解决方案(图文详解)(博主推荐)...
  3. 文本挖掘预处理流程总结(2)— 英文
  4. Spring的@ImportResource注解
  5. Dotnet中Socket网络通信
  6. 《Essential C++》笔记之(static)静态类成员
  7. “工业革命4.0”时代,智能汽车应是什么样?
  8. 【PLSQL】PLSQL安装、破解以及汉化教程
  9. 调用JS函数的内部函数
  10. MATLAB矩阵基础知识(二)
  11. python的索引与切片
  12. Java编程那些事儿
  13. win10“网络属性”选项卡空白怎么办
  14. android 6.1 app闪退,手机软件闪退怎么办 具体解决方法【图文】
  15. Linux基础:文件类型
  16. 100vh和100%的区别
  17. 别让用户发呆——设计中的防呆策略【转】
  18. JAVA关于集合类小程序--模拟新浪用户注册
  19. 浏览器缓存机制(强缓存和协商缓存)
  20. 利用Rational Rose进行C++代码和数据库逆向工程 结构分析

热门文章

  1. 炮兵阵地(POJ-1185)
  2. Linux 进程管理控制
  3. 动态规划 —— 背包问题 P03 —— 多重背包
  4. 保留12位小数的浮点数(信息学奥赛一本通-T1025)
  5. 计算(a+b)*c的值(信息学奥赛一本通-T1007)
  6. CondenseNet总结
  7. vutils.save_image==>将给定的张量保存为图像
  8. Oracle SQL中的!=与
  9. HTMLCSSJavaScript个人入门自学笔记
  10. Anaconda下tensorflow虚拟环境的创建以及遇到的问题(Ubuntu)