asp.net 中保存值得问题

winebottle 2008-11-18 10:58:12
asp.net
public partial class _Default : System.Web.UI.Page 
{
public int id = 1;
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
this.id++;
this.Label1.Text = id.ToString();
}
protected void Button2_Click(object sender, EventArgs e)
{
this.id++;
this.Label1.Text = id.ToString();
}
}

c#
using System;

public class a
{
public int id=1;
public void add()
{
id++;
}
public void add2()
{
id++;
}
}
public class b
{
public static void Main()
{
a a1=new a();
a1.add();
a1.add2();
Console.Write(a1.id);
}
}
...全文
117 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjjzg 2008-11-18
  • 打赏
  • 举报
回复
因为值被保存了,当执行完时将值重新还原成初始值
海阔天空_cn 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 winebottle 的回复:]
如果有并发的话 static 的值 会被很多用户改变吧,那每个用户得到的就不是自己需要的值了
就算实例了很多对象 但static 的值 应该是一个吧
[/Quote]


你理解的对,所有的用户共享这个别static变量, 在一个页面里保存数据推荐使用ViewState; ViwState变量可以简单理解为是和本页面同生共死的, 也就是说页面还在,变量也就在, 页面关闭了,它也就释放了。 可能和用HiddenField 达到一样的效果。
michael_sw 2008-11-18
  • 打赏
  • 举报
回复
就是一个页面生存周期的问题, 每次重新对页面的类进行实例化,当然保存不了了
winebottle 2008-11-18
  • 打赏
  • 举报
回复
如果有并发的话 static 的值 会被很多用户改变吧,那每个用户得到的就不是自己需要的值了
就算实例了很多对象 但static 的值 应该是一个吧
criedshy 2008-11-18
  • 打赏
  • 举报
回复
你点Button的时候,页面会提交一次,也就是会刷新,刷新后id = 1值又变成原来的值了


你可以放在ViewState中,这样就不会丢值了
yuchang1980 2008-11-18
  • 打赏
  • 举报
回复
楼上的大佬都说了,因为web的无状态性引发的。对于web而言每次你都是在获取或者说重构一个新的对象,这个对象和你之前用过的对象是没有关系的。
winebottle 2008-11-18
  • 打赏
  • 举报
回复
哪位老大回答一下啊
winebottle 2008-11-18
  • 打赏
  • 举报
回复
using System;

public class a
{
public static int id=1;
public void add()
{
id++;
}
public void add2()
{
id++;
}
public void get()
{
Console.Write(id);
}
}
public class b
{
public static void Main()
{
a a1=new a();
a1.add();
a1.add2();
a a2=new a();
a2.add();
a2.add2();
a2.get();
}
}

如果有并发的话 static 的值 会被很多用户改变吧,那每个用户得到的就不是自己需要的值了
不会还非得用 HiddenField 吧
zhiaini 2008-11-18
  • 打赏
  • 举报
回复
学习了
cyz9977 2008-11-18
  • 打赏
  • 举报
回复
????
你的問題很奇怪~~~
也許你應該說在website中和winform中的區別
周公 2008-11-18
  • 打赏
  • 举报
回复
另外,Web应用程序是无状态的。每次请求一个新网页或者刷新页面服务器都会创建一个当前页的新实例,这就意味着无法获取页面的以前的信息,如果确实需要这么做,需要采用额外的机制。

楼上说的static也行,也可以用Cookie或者Session。
周公 2008-11-18
  • 打赏
  • 举报
回复
asp.net夜话之五:Page类和回调技术
在今天我主要要介绍的有如下知识点:Page类介绍:介绍单页模型和页面、代码分离模型。Page的生命周期:介绍Page类个各个生命周期还有Page生命周期内的一些相关事件。IsPostBack属性:用于判断当前页面是否是响应客户端回发。ClientScriptManager类:用于动态向当前页面注册javascript脚本的类。回调技术(CallBack):通过回调实现在客户端调用服务器端方法而不用提交整个表单。
winebottle 2008-11-18
  • 打赏
  • 举报
回复
如果在 asp.net 声明为 public static int id = 1;
实际使用中 会不会 有问题
周公 2008-11-18
  • 打赏
  • 举报
回复
每次提交一次表单的时候都会重新实例化当前页面所代表的类的一个实例,以前的信息不能保存,这是由于Web是无状态有关。
在WinForm就不会存在这个问题。
winebottle 2008-11-18
  • 打赏
  • 举报
回复
为什么 在 asp.net 中结果为2
c# 中结果为3

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧