调用Guid.NewGuid()产生一个随即不重复数,为什么每次刷新都会变化?

时间:2021-05-10 09:53:28
public string GetShoppingCartId()
    {
        System.Web.HttpContext context = System.Web.HttpContext.Current;
        Guid tempShoppingCartId = Guid.NewGuid();
                     context.Response.Cookies["tempCartid"].Value = tempShoppingCartId.ToString();        
        return tempShoppingCartId.ToString();

    }这个是产生随即id的方法
在首页调用时代码如下:
protected void Page_Load(object sender, EventArgs e)
    {
           
        if (IsPostBack==false)
         {       ShopCart shopcart = new ShopCart();                
                string tempShopID = shopcart.GetShoppingCartId();
                Session["TShopID"] = tempShopID;
                Response.Write(tempShopID);             
         }}
不知道为什么每次刷新都会调用方法,是产生的id不断变化……

22 个解决方案

#1


Guid.NewGuid() 看名字也知道创建了个新的GUID  GUID不重复..所以一直变..
生成好GUID就不要再生成GUID了.

#2


?什么意思啊?我把他放在isPostBack里面了啊,理论上应该调用一次啊

#3


你的问题不是为什么GUID不段变化的问题,而是为什么总刷新后调用GetShoppingCartId()的问题...

if(IsPostBack)
{
   ......
}

#4


引用 3 楼 hanhanmj 的回复:
你的问题不是为什么GUID不段变化的问题,而是为什么总刷新后调用GetShoppingCartId()的问题... 

if(IsPostBack) 

  ...... 
}


F10,跟进去单步看一下...

#5


protected void Page_Load(object sender, EventArgs e) 
    { 
          
        if (!IsPostBack) 
        {      ShopCart shopcart = new ShopCart();                
                string tempShopID = shopcart.GetShoppingCartId(); 
                Session["TShopID"] = tempShopID; 
                Response.Write(tempShopID);            
        }} 

#6


zheyang和我的效果一样啊

#7


if(IsPostBack) 
这样的话就没有效果啊,打印都打印不出来

#8


引用 7 楼 yan717fang 的回复:
if(IsPostBack) 
这样的话就没有效果啊,打印都打印不出来


我的意思是你跟进去看看这个块里的代码...不是这样写.这样写肯定错的..

#9


跟进去看什么啊,他在pageload里面写得,直接就执行了,看不出什么,

#10


哦 看到了!ispostback这样是每次刷新都执行了

#11


引用 10 楼 yan717fang 的回复:
哦 看到了!ispostback这样是每次刷新都执行了


F9,F10....UP!!!!!!

#12


不过这样if(IsPostBack) 

  ...... 
}的话if里面的代码就没有执行

#13


引用 12 楼 yan717fang 的回复:
不过这样if(IsPostBack) 

  ...... 
}的话if里面的代码就没有执行


那是当然的了IsPostBack是判断是否是页面提交,
手工刷新页面和手工刷新页面都会出发Page_Load,
如果要防止每次刷新执行,而只需在提交后执行就要用
if (IsPostBack) // 如果是提交页面
{
  ... // 不submit的话,自然是不执行了
}
else // 手动刷新页面
{
...
}

#14


一句话更正

页面提交和手工刷新页面都会出发Page_Load,

#15


因为ispostback是判断是否有事件回发,而楼主每次点击刷新的时候正好符合了if (IsPostBack==false) 的条件,所以每次刷新都会执行GetShoppingCartId这个方法。楼主可以做个小测试了解下ispostback的作用。

#16


哦这样啊但是我想一打开页面就产生个id而且不会因刷新而变化,我该怎么办啊

#17


如果你只想让ID不变化..其实有办法..

第一次进去的时候把生成出来的GUID 放到一个 Session或者是临时变量里...

当然首先这个Session 或者临时变量为空的..
然后再进去的时候if 一下Session或者临时变量..

如果不为空,就拿Session里面的值做你接下来的操作就行了..

#18


定义一个公共变量 
bool GotID=false;


if (IsPostBack&&!GotID)
{
    ...
    GotID=true;
}

#19


额。。。。winform写多了。。。
 GetID要放在Session里
Session[GotID]=false;

if (Session[GotID]==null||!Session[GotID])
{
 getid();
 Session[GotID]=true; 
}

#20


按你这样写确实是好些了,就是跳到其他的页面再回来,那个id不会刷新了,就是如果手动刷新的话第一次不会变化,但之后那个数就会变化

#21


有些小奇怪啊

#22


哦哦 是手动点刷新就变化  跳转再回来没事

#1


Guid.NewGuid() 看名字也知道创建了个新的GUID  GUID不重复..所以一直变..
生成好GUID就不要再生成GUID了.

#2


?什么意思啊?我把他放在isPostBack里面了啊,理论上应该调用一次啊

#3


你的问题不是为什么GUID不段变化的问题,而是为什么总刷新后调用GetShoppingCartId()的问题...

if(IsPostBack)
{
   ......
}

#4


引用 3 楼 hanhanmj 的回复:
你的问题不是为什么GUID不段变化的问题,而是为什么总刷新后调用GetShoppingCartId()的问题... 

if(IsPostBack) 

  ...... 
}


F10,跟进去单步看一下...

#5


protected void Page_Load(object sender, EventArgs e) 
    { 
          
        if (!IsPostBack) 
        {      ShopCart shopcart = new ShopCart();                
                string tempShopID = shopcart.GetShoppingCartId(); 
                Session["TShopID"] = tempShopID; 
                Response.Write(tempShopID);            
        }} 

#6


zheyang和我的效果一样啊

#7


if(IsPostBack) 
这样的话就没有效果啊,打印都打印不出来

#8


引用 7 楼 yan717fang 的回复:
if(IsPostBack) 
这样的话就没有效果啊,打印都打印不出来


我的意思是你跟进去看看这个块里的代码...不是这样写.这样写肯定错的..

#9


跟进去看什么啊,他在pageload里面写得,直接就执行了,看不出什么,

#10


哦 看到了!ispostback这样是每次刷新都执行了

#11


引用 10 楼 yan717fang 的回复:
哦 看到了!ispostback这样是每次刷新都执行了


F9,F10....UP!!!!!!

#12


不过这样if(IsPostBack) 

  ...... 
}的话if里面的代码就没有执行

#13


引用 12 楼 yan717fang 的回复:
不过这样if(IsPostBack) 

  ...... 
}的话if里面的代码就没有执行


那是当然的了IsPostBack是判断是否是页面提交,
手工刷新页面和手工刷新页面都会出发Page_Load,
如果要防止每次刷新执行,而只需在提交后执行就要用
if (IsPostBack) // 如果是提交页面
{
  ... // 不submit的话,自然是不执行了
}
else // 手动刷新页面
{
...
}

#14


一句话更正

页面提交和手工刷新页面都会出发Page_Load,

#15


因为ispostback是判断是否有事件回发,而楼主每次点击刷新的时候正好符合了if (IsPostBack==false) 的条件,所以每次刷新都会执行GetShoppingCartId这个方法。楼主可以做个小测试了解下ispostback的作用。

#16


哦这样啊但是我想一打开页面就产生个id而且不会因刷新而变化,我该怎么办啊

#17


如果你只想让ID不变化..其实有办法..

第一次进去的时候把生成出来的GUID 放到一个 Session或者是临时变量里...

当然首先这个Session 或者临时变量为空的..
然后再进去的时候if 一下Session或者临时变量..

如果不为空,就拿Session里面的值做你接下来的操作就行了..

#18


定义一个公共变量 
bool GotID=false;


if (IsPostBack&&!GotID)
{
    ...
    GotID=true;
}

#19


额。。。。winform写多了。。。
 GetID要放在Session里
Session[GotID]=false;

if (Session[GotID]==null||!Session[GotID])
{
 getid();
 Session[GotID]=true; 
}

#20


按你这样写确实是好些了,就是跳到其他的页面再回来,那个id不会刷新了,就是如果手动刷新的话第一次不会变化,但之后那个数就会变化

#21


有些小奇怪啊

#22


哦哦 是手动点刷新就变化  跳转再回来没事