正在为aspx页面c#写入递增计数器

本文关键字:计数器 aspx 页面 | 更新日期: 2023-09-27 17:57:31

我正在开发一个确认系统,该系统在流程完成后向用户发回一个数字。我需要的是一个递增计数器,用来发回新号码。这就是我到目前为止所拥有的。

int i = 100;
int Counter = i++;
w.Write(Count);

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

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

正在为aspx页面c#写入递增计数器

将计数器保存到应用程序保管库:

// 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
}

我会将它存储在asp应用程序对象或数据库中。每个请求本质上都是无状态的,因此如果没有会话或数据库,就无法将变量保留在作用域中。

var number = Application["NameOfObject"] as int ?? 100;
number ++;
Application["NameOfObject"] = number;
w.write(number);

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

Session("counter") = i++;

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

要使站点范围内的数据在不同的会话中长期保存,唯一真正的解决方案是将命中率存储在数据库中,因为应用程序数据在重新加载应用程序时会被清除(如果没有用户或web.config发生更改,则会发生这种情况)