gpt4 book ai didi

asp.net - 回发后如何保留转发器中的数据?

转载 作者:行者123 更新时间:2023-12-04 12:49:59 25 4
gpt4 key购买 nike

我有一个中继器,可以显示各种股票的财务数据和价格。

在这个页面上,我还有一个“导出”按钮,需要将数据~在屏幕上~转换为用户的 CSV。

问题是,在我对“库存”实体列表进行数据绑定(bind)后:

List<Stock> stocks = GetStocks()
rptStockList.DataSource = stocks;
rptStockList.DataBind();

数据不会在回发时保留。

此外,此页面上的数据通过 UpdatePanel 和 Timer 控件不断更新(每次都重新绑定(bind)数据)。中继器控件中显示的各种股票的价格每 30 秒发生一次变化。

现在,我有一个链接按钮,它在代码隐藏中有一个点击事件方法,应该为用户导出屏幕上的~数据~。我需要获取最后一个数据绑定(bind)到中继器的股票列表的当前值。我不能简单地从数据库中获取最新值,因为这些值将在上次刷新之间的时间内发生更改。
protected void lbtnExportStocks_Click(object sender, EventArgs e)
{
// No longer have the stock data used in the repeater control
ExportStocksToExcel();
}

我知道 ASP.NET 不会在回发时保留转发器的数据源,但我仍然需要能够重新构建此 Stock 实体列表,以便我可以将 CSV 发送给它们,或者我需要将其保留在一些方式。

我不想做任何在性能方面过于繁重的事情,因为在一周中的某些日子里,这个应用程序可能会大量使用。

这种情况的正确解决方案是什么?我应该遍历中继器的“项目”集合并重建 Stock 实体吗?

最佳答案

可以储存stocks在 Viewstate 中,还是在 Session 中?例如

List<Stock> stocks = GetStocks()
rptStockList.DataSource = stocks;
rptStockList.DataBind();

ViewState.Remove("stocks");
ViewState.Add("stocks", stocks);

private void ExportStocksToExcel
{
List<Stock> persistedStocks;

persistedStocks = (List<Stock>)Page.ViewState["stocks"];
...
}

session 状态实际上可能是存储 Stocks 的更好选择因为这不会在页面中传输给客户端(可能需要进行“创意编辑”的所有可能性)——这在这样的应用程序中可能非常重要。 (是的,您可以加密 Viewstate,但要注意那些您可能不想要的开销的高峰时间。)

关于asp.net - 回发后如何保留转发器中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com