.Net正式版中的一些Bug及其解决方案

ZDNet软件频道 时间:2002-09-04 作者:飞刀 |  我要评论()
本文关键词:
本文讲述了利用VS.Net开发程序时遇到的一些bug以及解决方案。
(1)Session的问题

问题

在我的Windows.Net 3604 + .Net Framework正式版的编程环境中,.Net下的Session总是有问题,比如我在A程序下设置了一个Session字典,这个Session将会在B程序下读取,现在的情况就是我在B程序读取这个Session时,第一次能够正常读取,但一旦页面被提交(这在Asp.Net编程中是常有的事情),Session就会马上消失,错误报告“Object is null”,使用Trace发现此Session已经不存在。

此问题排除浏览器不支持Cookie的可能,因为我读取Cookie是正常的。

解决方法

1.使用Session的CookieLess状态,具体操作即更改web.config或machine.config文件,这样Session的传值是在URL中进行的。

2.使用Cookie,Cookie是可以正常使用的,只要浏览器没有关闭此功能。

(2)FindControl方法的问题

问题:

大家都知道所有控件集合都存在有一个FindControl方法,一般最常用的地方就是DataGrid对Item中控件的操作。这是一个很好用的方法,可以让我们迅速地找到我们想要的控件,但是他也是我遇到过的最不稳定的方法。

在Item中使用这个方法,一般不会出现什么问题,但是在DataGrid、DataList的各种事件中这个方法经常是找不到控件!!DataGrid还好一点,DataList的事件中发生的情况就惨不忍睹,100%的找不到控件!!这个控件是活生生存在的,使用Controls集合中是可以发现这个控件的。这个问题我在Beta2下就已经发现了,原以为微软会在正式版本中更正,不知道是没有人提出呢?还是没有发现,正式版中依然这样。

开始我以为FindControl这个方法没有写好,我就自个重写了这个方法,但是当我高兴地去用我自个写的方法时,发现传回来的值还是null!!!现在也就只有一个解释了,那就是.Net环境中对Control类型的支持还是不稳定的。

解决方法:

即然通过编写方法传回值的方法搞不定,那么就只有用最原始的方法,在本函数内,直接列举Controls集合中的控件,直到找到这个控件为止。

privatevoid ShowQuestion_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
//当返回值为Control类型,经常出现空值

foreach(Control cl in e.Item.Controls)
{
     if(cl.ClientID.IndexOf("OptionalTd1") != -1 || cl.ClientID.IndexOf("OptionalTd2") != -1)
     {
        foreach(Control clx in cl.Controls)
         {
            if(clx.ClientID.IndexOf("Oplbl1") != -1 || clx.ClientID.IndexOf("Oplbl2") != -1)
             {
                 if(((Label)clx).Text == "")
                {
                    ((HtmlTableCell)cl).InnerHtml = "";
                }
            }
         }
      }
}

是程序员都会对上面的方法蚩之以鼻,但是没有办法了,微软逼我走上了这条路,不然没有办法找到我要的东东。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134