9

我正在开发一个 ASP.NET/C# 网站。

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

Dictionary<string, decimal> Results

然后将其绑定到 ASP.NET 图表

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 并且保存在“结果”字典中的数据以及图表都丢失了。

有没有办法在回发发生时不丢失数据而不必再次从数据库中读取?

感谢您的任何帮助。

4

6 回答 6

10

是 利用ViewState在回发之间保留数据。

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

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

于 2011-09-12T13:13:29.437 回答
4

一些响应者建议将数据存储在 ViewState 中。虽然这在 ASP.NET 中是自定义的,但如果您想沿着这条路线走,您需要确保您完全理解其中的含义,因为它确实会损害性能。为此,我建议阅读真正理解 ViewState

通常,将从数据库中检索到的数据集存储在 ViewState 中确实会损害性能。在不知道您的情况的详细信息的情况下,我会冒险猜测您最好在每次请求时从数据库中加载数据。本质上,您可以选择 a) 序列化数据并将数据发送到客户端(可能连接速度较慢)或 b) 从数据库中检索数据,该数据库针对数据检索和智能缓存进行了优化。

于 2011-09-12T13:22:34.630 回答
3

您可以将数据放入ViewStateSession然后能够“在另一侧”将其拉出。

于 2011-09-12T13:12:53.767 回答
1

比使用 ViewState 并从客户端来回传递此数据更好的解决方案可能是创建一个客户端 ID,每个客户端 ID 都来回传递,并在服务器端保留此数据的缓存,由此 ID 键入。这样您就不需要每次都将这些数据从客户端发送到服务器,反之亦然。

这对我来说听起来仍然是错误的,但它比其他一些答案更好的解决方案,由于数据来回来回会涉及如此多的开销。

实际上,由于您只是在更改显示信息,而且从您的问题来看,我不相信您实际上是以任何方式处理这些数据,在我看来,这确实是您旁边的某种 javascript 的工作ASP.NET 页面。我从来没有这样做过,但是一些基本的谷歌搜索确实出现了一些关于这个的文章

于 2011-09-12T13:20:11.957 回答
0

而不是使用 ViewState,为什么不将用于为字典分配值的代码移动到函数,然后在每次回发时从 page_load 调用该函数。这样您就不会丢失图表中的数据。

于 2012-10-12T21:42:31.850 回答
0

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

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

不要将其用于安全数据,因为客户端用户可以根据需要执行查看源以查看页面中的数据。

于 2017-03-07T13:26:00.247 回答