我在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()获取新值时它仍显示旧值
答案 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;
}
}