Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过回发保存数据?_C#_Asp.net_Postback_State Management - Fatal编程技术网

C# 如何通过回发保存数据?

C# 如何通过回发保存数据?,c#,asp.net,postback,state-management,C#,Asp.net,Postback,State Management,我正在一个ASP.NET/C网站上工作 我正在从数据库中读取数据,并将其保存在字典中 Dictionary<string, decimal> Results 我想在单击按钮时更改点的标签 protected void Button_Click(object sender, EventArgs e) { PieChart.Series["Series"].Points[0].Label = "abc" } 但问题是,当我点击按钮时,会发生回发,保存在“结果”词汇表中的数据和

我正在一个ASP.NET/C网站上工作

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

Dictionary<string, decimal> Results
我想在单击按钮时更改点的标签

protected void Button_Click(object sender, EventArgs e)
{
    PieChart.Series["Series"].Points[0].Label = "abc"
}
但问题是,当我点击按钮时,会发生回发,保存在“结果”词汇表中的数据和图表都会丢失

有没有一种方法可以在发生回发时不丢失数据,而无需重新读取数据库中的数据


谢谢您的帮助。

您可以将数据放入
ViewState
Session
中,然后可以“在另一端”将其拉出。

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

public Dictionary<string, decimal> Results
{ 
  get { return ViewState["Results"]; }
  set { ViewState["Results"] = value; }
}
公共字典结果
{ 
获取{return ViewState[“Results”];}
设置{ViewState[“Results”]=value;}
}
注意:
检查viewstate的空值,否则会引发异常或错误

与使用viewstate并从客户端来回传递此数据相比,更好的解决方案可能是创建一个客户端id,每个id来回传递,并在服务器端保留此数据的缓存,通过此id键入。这样,您不必每次都将此数据从客户端发送到服务器,而只需通过另一种方式

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


事实上,由于您只是在更改显示信息,而且从您的问题来看,我不相信您实际上在以任何方式处理这些数据,所以在我看来,这实际上是一项与ASP.NET页面一起使用某种javascript的工作。我从来没有这样做过,但有些人确实发现了一些关于这方面的信息。

一些回复者建议将数据存储在ViewState中。虽然这在ASP.NET中是自定义的,但如果您想继续这样做,则需要确保您完全理解其含义,因为这会真正影响性能。为此,我建议阅读


通常,在ViewState中存储从数据库检索的数据集会影响性能。在不了解您的具体情况的情况下,我冒昧地猜测,您最好在每次请求时从数据库加载数据。基本上,您可以选择a)序列化数据并将数据发送到客户端(可能连接速度较慢)或b)从数据库检索数据,这是为数据检索和智能缓存而优化的

与其使用ViewState,不如将用于为字典赋值的代码移动到一个函数,然后在每次回发时从page_load调用该函数。这样您就不会丢失图表中的数据

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

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



不要将其用于安全数据,因为客户端用户如果愿意,可以通过查看源代码查看页面中的数据。

将数据库输出填充到
ViewState
中通常是个坏主意。想想将多个KB甚至MB的数据来回传输到服务器的开销。@CodeCaster:无论如何,如果他想在没有会话的情况下保留数据,他必须将这些数据放入响应中,这里的viewstate很好,因为它是经过编码的。@cjk-viewstate是这个问题的解决方案……不要进行会话,因为它不需要。因为他只想为回发保留数据。我正在保存一本最多50个条目的字典。这会严重影响性能吗?数据读取和数据绑定,是在页面加载时发生的吗?你不能用javascript实现这一点?@remi bourgarel-使用javascript,你需要使用Cookie来存储值,它是一个字典对象,如何以Cookie的形式保存数据。如果可能的话,这将需要更多的努力viewstate@Pranay:对我来说,仅仅为了更改点标签而调用服务器是没有用的,至少他可以通过ajax调用来获取此标签。非常感谢您指出这一点。但事实上,我正在从3个excel文件中读取数据,并通过大型算法进行处理。数据由3000多行组成,但结果是一个最多包含50项的字典。我对代码性能一无所知,但我认为使用viewstate比重新生成所有内容都好。你怎么看?在这种情况下,对每个请求进行抓取和重新计算听起来绝对是个坏主意:)。根据项目大小,在ViewState中存储50个项目可能是正常的。我可能还会考虑在服务器上缓存结果(也许使用ASP.NET的缓存,见)并避免ViewState。谢谢。我到底需要什么?为什么要使用财产?只要ViewState[“Results”]就足够了,对吗?请记住,除非您明确告诉asp.NET控件不要使用ViewState,否则它们会使用。换句话说,在此处保存一些html元素的内容,这正是ASP.NET在使用控件时默认所做的。如果该控件设置Visible=“false”属性,用户如何在视图源中查看数据?@HussainMd普通用户不会在显示的页面中看到数据,但任何稍有知识的人都可以查看源代码。浏览器将显示HTML代码,包括安全数据变量。您可以假设任何搜索安全数据的人都已经知道视图源将显示原始HTML。@Steve Hibbert我的意思是,如果您设置Visible=“false”对于任何ASP.NET服务器控件,ASP.NET引擎在呈现页面时不会考虑它们,换句话说,页面后不会添加到DOM或原始HTML中。loaded@HussainMd对不起,我不明白。您是正确的,asp.net引擎不会呈现控件。问题是,安全数据不会出现在HTML页面中,并且
public Dictionary<string, decimal> Results
{ 
  get { return ViewState["Results"]; }
  set { ViewState["Results"] = value; }
}