如何通过回发保存数据

本文关键字:保存 数据 何通过 | 更新日期: 2023-09-27 18:08:15

我正在做一个ASP。NET/C #网站。

我正在从数据库中读取数据,并将其保存在字典中

Dictionary<string, decimal> Results

,然后将其绑定到ASP。网络图

PieChart.Series["Series"].Points.DataBind(Results, "Key", "Value", string.Empty);  

我想改变点的标签当我点击一个按钮。

protected void Button_Click(object sender, EventArgs e)
{
    PieChart.Series["Series"].Points[0].Label = "abc"
}

但是问题是,当我点击按钮时,发生了PostBack,并且保存在"结果"字典中的数据以及图表都丢失了。

是否有一种方法可以在回发发生时不丢失数据,而不必重新从数据库中读取数据?

谢谢你的帮助。

如何通过回发保存数据

是使用ViewState来保存回发之间的数据

public Dictionary<string, decimal> Results
{ 
  get { return ViewState["Results"]; }
  set { ViewState["Results"] = value; }
}

注意:检查viewstate的Null值,否则会抛出异常或错误

一些回应者建议将数据存储在ViewState中。这在ASP中是自定义的。如果您想沿着这条路走下去,您需要确保您完全理解其中的含义,因为它确实会损害性能。为此,我建议阅读TRULY understanding ViewState。

通常,在ViewState中存储从数据库检索到的数据集会损害性能。在不了解您的具体情况的情况下,我冒昧地猜测,您最好只是在每次请求时从数据库加载数据。从本质上讲,您可以选择a)序列化数据并将数据发送给客户端(客户端可能在慢速连接上),或者b)从数据库检索数据,数据库针对数据检索和智能缓存进行了优化。

您可以将数据放在ViewStateSession中,然后能够将其"在另一边"拉出

比使用ViewState并从客户端来回传递此数据更好的解决方案可能是创建一个客户端id,每个客户端id都被来回传递,并在服务器端保留此数据的缓存,由该id进行键接。这样你就不需要每次都从客户端发送数据到服务器,只需要反过来。

这对我来说仍然是错误的,但这是一个比其他一些答案更好的解决方案,因为这些答案会涉及到由于来回数据而产生的大量开销。

事实上,因为你只是改变显示信息,从你的问题来看,我不相信你实际上是在以任何方式处理这些数据,在我看来,这真的是一项工作的某种javascript与你的ASP。网络页面。我从来没有这样做过,但是一些基本的谷歌搜索确实找到了一些关于这方面的文章。

与其使用ViewState,为什么不把给字典赋值的代码移到一个函数中,然后在每次回发时从page_load调用这个函数呢?这样你就不会丢失图表中的数据。

我经常使用asp:HiddenField在客户端存储少量的非安全数据。

在Page_Load()函数中,您可以设置隐藏字段的值,然后您可以在稍后调用的函数中读取它。

不要将此用于安全数据,因为如果客户端用户愿意,可以执行View Source来查看页面中的数据。