在回发上丢失所有值

时间:2017-03-10 13:46:51

标签: c# asp.net

我在C#中继承了文本框和下拉列表控件,并为它们添加了一些自定义逻辑,用于设置背景和所有C# 我将它们添加到我的用户控件(ascx)并在aspx页面中使用此usercontrol。但是在回发中我丢失了所有文本框下拉列表的值等。 任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:2)

这就是它的工作方式,而且比你想象的要糟糕。并不是说你的控制权正在丢失它的数据。它不再是控件的相同实例。

在ASP.Net中,您可以在每次回发时使用页面类的完全新实例,包括类中的任何控件。在您能够做很多事情之前,您需要了解page lifecycle,但总结如下:

  1. 用户通过浏览器发送页面的http请求
  2. IIS中的ASP.Net运行时创建页面实例,并按特定顺序调用Pre_Init,Load,Render等方法。
  3. 此过程的结果随后用于使用呈现的html向用户的浏览器发送http响应。
  4. 发送响应后,将丢弃和销毁页面类实例。它已不复存在。
  5. 浏览器接收http响应并为用户呈现页面。
  6. 如果用户执行任何导致回发的操作,整个进程将再次启动。它是一个全新的http请求,一个全新的页面类,以及一个全新的http响应。重复调用页面的Load方法等事情。还要注意步骤4和5的顺序。由于浏览器和Web服务器之间的延迟,在响应甚至到达用户之前页面类已经被销毁是很常见的。当用户看到页面时,生成页面的类实例已经很久了。

    要解决这个问题,您需要将应该在请求中保留的数据放入实际存在的存储位置,例如ViewState或Session。