为aspx页面编写递增计数器c#

时间:2011-05-23 14:17:26

标签: c# .net asp.net counter

我正在开发一个确认系统,在完成该过程后会向用户发送一个号码。我需要的是一个递增计数器,它会发回新号码。这是我到目前为止所做的。

int i = 100;
int Counter = i++;

w.Write(Count);

我希望计数器从100开始,当第一个用户使用系统时,他们在屏幕上打印的计数将是101.第二个用户将是102 ......依此类推。

我可以让它增加,但唯一显示的是101,它不会保存101并将其增加到102.有什么想法吗?

3 个答案:

答案 0 :(得分:4)

将计数器保存到Application金库:

// read data
// if no such one is present, set counter to the default value (100, etc)
int count = Application["counter"] as int? ?? 100;

// increment
count++;

// save back
Application["counter"] = count;

// do stuff you want to measure

但是,如果应用程序因超时而死亡,或者相应应用程序池被回收的其他原因,此数据将会丢失。

因此考虑使用数据库。安装本地SQL Express是一项非常简单的任务。


还有另外一件事要考虑:如果工作失败,你想要计算它吗?

try
{
    DoWork();
    Count(); // count only if success
}
finally
{
    Count(); // count it anyway
}

答案 1 :(得分:0)

我会将它存储在asp Application对象或数据库中。每个请求本质上都是无状态的,因此您无法在没有会话或数据库的情况下将变量保留在范围内。

var number = Application["NameOfObject"] as int ?? 100;

number ++;
Application["NameOfObject"] = number;

w.write(number);

答案 2 :(得分:-2)

Web应用程序是无状态的,因此页面重新加载时会丢失所有数据。会话状态将数据保存在内存中:

Session("counter") = i++;

但请注意,会话状态是每个用户(因此每个用户将具有不同的计数)。

要使站点范围内的数据持续存在于不同的会话和长期,唯一真正的解决方案是将命中数存储在数据库中,因为应用程序数据在重新加载应用程序时被清除(如果没有用户或者如果有改为web.config)