木子屋 Dnawo's BLOG

分类:Web编程

共 944 篇

Web.config好用,但不宜滥用

在ASP.NET应用程序中,Web.config文件用于存储应用程序配置信息,并且ASP.NET提供了专门的类(如:System.Configuration.ConfigurationManager)来读取配置,这使得我们非常乐意把一些短小的数据存放在Web.config中。 但有一点值得注意:每次修改Web.config,都不可避免的会导致Session丢失。很显然,对于一个已经在运行的站点来说,修改Web.config则意味着所有登录用户被退出,这是非常不可取的。 所以,我们应该有选择性的在Web.config存储数据,所有存储在Web.config的数据,在站点运行后都不应被修改,这一点非常有必要。

ASP.NET密码框赋默认值方法

对于普通的文本输入框,可以使用下边的方法赋默认值: 将输入框类型改为密码后,页面上密码框总是空白,默认值丢失: 查看html代码,发现是缺少了value属性,只能在代码中另外再加下:

System.Web.HttpException: 无法使用前导 .. 在顶级目录上退出。

在ASP.NET页面使用TreeView控件时意外的报错,异常详细信息: System.Web.HttpException: 无法使用前导 .. 在顶级目录上退出。 问题重现 Web.sitemap: Default.aspx: 错误分析 Web.sitemap文件中的url相对地址,在TreeView控件中都将站点根目录(顶级目录)视为起始路径,而不论TreeView控件所在页面的实际位置,所以对于"../Default.aspx"这样的url,已跳出了站点目录之外,程序并报错。

通过MSIL看foreach循环

对应的MSIL代码为: 下边我们做些简单的分析 我们在C#代码中只声明了两个局部变量names和name,但在MSIL中多出了4个。 可以看到,MSIL先创建辅助字符串数组CS$0$0000,分配各元素的值,然后赋值给我们的names数组,感觉是转了一圈间接的来创建names数组,不知有什么优点? 从这段代码可以看出,foreach循环的内部其实是使用了for循环,CS$7$0002变量就相当于我们for循环中的i。让人困惑的是,这边操作的字符串数组即非CS$0$0000,也非names,又弄了个新数组CS$6$0001来用于循环,实在不解。 结论 在C#中,foreach循环的内部还是使用for循环。

通过MSIL看比较运算符是如何进行的

对应的MSIL代码为: 蓝色部分,将数值2赋给第一个局部变量i,将数值3赋给第二个局部变量j,并对它们进行cgt(>)运算,正常理解接下来应该是对运算结果进行判断并分支了。然而事实并不是这样的,再看红色部分,之后加载了一个数值0(相当于false)到内存中,然后将cgt运算结果和0进行ceq(=)运算,并将结果存储到编译器自己声明的一个变量CS$4$0000中,是对CS$4$0000进行判断后再进行分支的。测试了其他比较运算符,也都是会多出一个类似的ceq运算。

透过现象看本质,从MSIL看using语句

例如一个简单的数据库打开关闭操作: 用Ildasm.exe查看MSIL代码: 如红色部分代码所示,在finally块中,先将SqlConnection的实例conn和null比较,若相等则退出finally块,否则再调用Dispose方法来释放资源,所以,使用using语句我们就不需要手动去释放资源了,即使是出错的情况下,using也能保证资源被释放!

.NET使用消息队列示例

消息队列是Windows 2000、Windows XP、Windows Server 2003的一个组件,并将继续包含在Windows Vista和以后的Windows服务器中。即使目标接收应用程序没有运行,或运行发送或接收应用程序的计算机没有联网,协同合作的应用程序仍能利用消息队列在彼此之间发送和接收消息。在到达目标队列之前,消息由消息队列存储并转发。接收应用程序能够从队列中恢复数据。 消息队列的主要特点在于它分离发送和接收应用程序,使其不必同时运行。这意味着一个应用程序能够把数据存放在队列中,而不用理会队列中的项目是否被传送到接收应用程序。 消息队列包含两个重要的概念:队列和消息。队列用于存放消息,一个队列可以存储多个消息。.NET提供了两个相关的类:MessageQueue类用于管理队列,Message类用于管理消息。…

ASP.NET导航控件SiteMapPath、TreeView使用示例

1.配置地图文件(数据源) Web.sitemap: web.config: 2.导航控件SiteMapPath、TreeView使用示例 ①.SiteMapPath控件使用使用示例 ②.TreeView控件使用示例 说明 ·TreeView控件必须和SiteMapDataSource控件配合使用; ·若使用默认站点地图(Web.sitemap)做数据源,SiteMapPath和SiteMapDataSource控件的SiteMapProvider属性可省略,web.config中也就不需进行另外配置了;

.NET Framework3.5扩展方法使用示例

使用.NET Framework3.5扩展方法我们可以向现有的类添加方法,这在使用第三方类库时非常有用。下边我们给string类的Split方法添加一个重载: 扩展方法也可以IntelliSense,效果如下: 说明 ·扩展方法必需在.NET Framework3.5及以上版本中可以用,使用时需引用System.Core.dll; ·扩展方法所在的类及方法都必需是静态的; ·扩展方法第一个参数必须带this,this后边为要扩展的类名; ·当扩展方法的签名和类原有的方法签名重复时,.NET优先使用类自带的方法; 资料 @.扩展方法:http://msdn.microsoft.com/zh-cn/library/bb383977(v=VS.90).aspx

WAP站应避免直接跳到图片地址查看大图

如上图所示,在资源内容页中通常只显示一个小图(预览图、缩略图),同时放一个查看大图的链接。这样做既可以减少页面大小,加速页面打开速度,降低流量,又满足了部分用户查看细节的需要。 在WEB应用程序中,大图的链接地址,我们通常直接使用大图文件地址即可,用户点击浏览时直接调用浏览器打开,也能正常浏览;但在WAP应用程序中,若直接跳到图片地址查看大图,测试发现在一些智能机上,如N73,会弹出下载对话框,下载完后才能看图: 建议:WAP站查看大图时,应单独做一个WAP页面,用来显示大图,避免在部分机型上弹出下载对话框。