对于ASP.NET的一些小技巧,今天就和大家一起来分享下吧!
[url=http://www.beidaqingniao.org]  http://www.beidaqingniao.org  [/url]



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 runat="server" Width="130" DataTextField="ShortName" 
DataValueField="ShortName" DataSource> 
</asp:DropDownList> 
<asp:SqlDataSource runat="server" ConnectionString="<%$ ConnectionStrings:HTSystemConnectionString %>" 
SelectCommand="SELECT LTRIM(RTRIM([ShortName])) [ShortName] FROM [Customer] "> </asp:SqlDataSource> 
再来一个XmlDataSource 
<asp:DropDownList runat="server" Width="130" DataSource DataTextField="Text" DataValueField="Value"> 
</asp:DropDownList> 
<asp:XmlDataSource 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="http://blog.soso.com/qz.q/ABS"></Item> 
<Item Text="HIPS" Value="http://blog.soso.com/qz.q/HIPS"></Item> 
<Item Text="PA" Value="http://blog.soso.com/qz.q/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 runat="server" /> 
<asp:RequiredFieldValidator runat="server" ErrorMessage="RequiredFieldValidator" Display="None" ControlToValidate="txtUserName"></asp:RequiredFieldV alidator> 
验证用户名是必须输入的,否则不允许提交 
如果你用了验证控件,页面上的按钮的默认属性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,统一管理键值对,减少出错。