注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我只是一个人

我爱一个人

 
 
 

日志

 
 

静态变量的演示使用和误区  

2011-03-25 21:41:16|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
找到了留言时候为什么会串公司的原因了!
在页面中我使用了静态变量static作为公司的id
然而,静态变量是一个公用的,会被任何用户使用,当一个用户打开一个页面后,他的id被初始化成10,正好当他在操作的时候又有一个用户打开了这个页面
并且,id被初始化成了100,很显然,这个id的值现在就是100,当上个用户操作完成提交留言的时候,他的留言就提交给了id是100的那个公司了。
实验一下,有个页面Default.aspx
后台代码是这样的:
public partial class _Default : System.Web.UI.Page
{
    static int c = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(c+"<br/>");
   
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        c = Convert.ToInt16(TextBox1.Text);
        Response.Write(c + "<br/>");

   
    }
}

在页面中我们提供了一个文本框和一个按钮,当新打开这个页面时候,页面会输出c的值:0
当我们在另一个窗口打开这个页面Default.aspx
我们通过文本框为c赋值:10,此时这个新窗口的页面上会输出值:0和10
我们回到前一个窗口中,刷新一下这个页面,会发现此时页面输出的值也是10,这就不难解释我上边所说的了吧
静态变量的演示使用和误区 - 坚持下来的人! - 我只是一个人
 
但是问题又来了,通常我在程序中会通过url传递参数i一个参数的,通过这个参数来获取id的,也就是说,这个id会随着页面刷新而呈现为由当前参数获取的id的值

,而不会因为打开第二个页面后获取的id值不同而改变第一个页面中在id值(或许已经改变了,只是在刷新第一个页面的时候又被改变回来了)。为此我做了一下

实验:
有两个页面:Default.aspx和Default2.aspx
Default.aspx后台代码是:
 static int c = 0;
    protected void Page_Load(object sender, EventArgs e)
    {

        if (Convert.ToInt16(Request.QueryString["id"].ToString()) == 1)
        {
            c = 1;
        }
        else if (Convert.ToInt16(Request.QueryString["id"].ToString()) == 2)
        {
            c = 2;
        }
      
   
    }
  
Default2.aspx的页面代码是:
<div>
        <a href="Default.aspx?id=1" target="_blank">连接1 </a><br />
        <a href="Default.aspx?id=2" target="_blank">连接2</a>
    </div>


运行Default2.aspx页面上有两个连接分别是连接1和连接2,他们分别通过参数id传递一个值,分别是1 和 2,当我在运行之前预想的是
当我打开连接1的时候,页面上输出的是:1
打开连接2的时候页面上输出的是:2
然后刷新连接1的页面,将输出:2
(我受到了上边试验的影响,思维定式了)
然而运行后和我预想的并不一样,当我刷新连接1的页面后,页面输出的依然是:1,而不是预想的:2
原因很简单:c被重新赋值了所以输出的是被重新赋值的结果,而并不像预想的那样!
静态变量的演示使用和误区 - 坚持下来的人! - 我只是一个人
 

然而我的网站确确实实的出现了留言后,却未留给目标公司的现象,我当然在提交留言的时候用到了公司的id,并且这个id变量是个静态的,我想这个现象与我上边
所将的有最为密切的关系
是什么原因导致这样结果的出现呢?我也不知道,在得知正确的结果之前我不想多说什么!

猜想:因为在自己机器上,刷新连接1的页面时候c会被重新赋值的,如果在网络中会很多用户访问这个页面的话,比如一个人正好在提交留言(提交留言的时候他是不会刷新页面的 ),而刚好有人在别处打开这个页面,传递了不同的参数导致了id 的改变,然而这次提交刚好还未完成,便使用了这个被改变过的变量,才导致结果的改变。
不知道是不是这个样子,希望能够得到高人的指点!
  评论这张
 
阅读(82)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018