刷新存储在asp.net中的会话中的值

时间:2013-12-27 11:13:08

标签: c# asp.net

我在asp.net中有以下属性,我在其中存储了saveamount的值。

 private double SavingAmount
        {
            get
            {
                if (_priceSavingAmount == 0.0f)
                    _priceSavingAmount = (double)Session["Saving"];
                return _priceSavingAmount;
            }
            set
            {
                _priceSavingAmount = value;
                Session["Saving"] = _priceSavingAmount;
            }
        }

USAGE

SavingAmount=FromService();

当前属性的问题是我没有获得刷新值意味着当我从 FromService()获取新值时它仍显示旧值

1 个答案:

答案 0 :(得分:2)

根据我的理解你的问题,只要FromService的结果发生变化,你就想在Session变量中更新。遗憾的是,您存储在会话内存中的值无法以这种方式更新。您必须手动检查FromSession的新返回值并手动更新Session变量。
为避免误解:

SavingAmount=FromService();

在调用FromService时指定它的返回值。为此,调用FromService并将返回值分配给属性。它基本上等同于:

var temp = FromService();
SavingAmount = temp;

只需将代码写入一行就不会改变此行为。
那么你可以做些什么来解决你的需求:我怀疑你把FromService的返回值放在Session变量中,以免经常调用FromService。不幸的是,您必须评估FromService,以便检查返回值是否与存储在会话内存中的值相比发生了变化。
一种方法是为每个请求调用一次FromService(但仅在真正需要值时)。这样,每个请求的值都会更新,但保证每个请求对服务的调用不会超过一次(当然,如果请求之间的值没有变化,那么服务调用的次数比会话中的值将“神奇地”更新。为此,您可以将值存储在Request Items集合中:

private double SavingAmount
{
    get
    {
        double priceSavingAmount;
        // Add some synchronization if required
        if (!HttpContext.Current.Items.Contains("Saving"))
        {
            priceSavingAmount = FromService();
            HttpContext.Current.Items.Add("Saving", priceSavingAmount);
        }
        else
            priceSavingAmount = (double)HttpContext.Current.Items("Saving");
        return priceSavingAmount;
    }
}