基本上我正在尝试使用List<>存储数据。我将定义部分放在类的顶部(在声明类之后)。但问题是,在我将一些数据放入列表后,网页似乎不断重新加载,因此数据不断被删除,因为它在重新加载时再次通过声明。无论如何定义每次重新加载列表时都不会死?
是的,我的定义是这样的......
public partial class WebForm1 : System.Web.UI.Page
{
DateTime SelectedDate = DateTime.Today;
List<appointment> AppointmentList;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack && !IsCallback)
{
AppointmentList = new List<appointment>();
DateTextBox.Text = SelectedDate.ToShortDateString();
for (int x = 0; x <= 23; x++)
{
TimeSpan Hour = new TimeSpan((x * 1), 0, 0);
StartTimeList.Items.Add(Hour.ToString(@"h\:mm"));
EndTimeList.Items.Add(Hour.ToString(@"h\:mm"));
}
}
}
}
答案 0 :(得分:3)
Asp.net使用HTTP协议,该协议是无状态的,并且在http请求之间不维护状态。您必须使用ViewState
之类的技术来维护请求之间的状态。您可以将List对象放在ViewState
中,并在需要时从ViewState中检索它。
保存List<T>
或ViewState
中的任何对象
ViewState["YourList"] = list;
从List<T>
ViewState
List<YourType> list = (List<YourType>) ViewState["YourList"];
全局变量的值丢失,因为Http是无状态协议。
stateless protocol (Http) 不需要HTTP服务器保留 有关每个用户的信息或状态,持续时间为多个 要求。但是,某些Web应用程序实现状态或服务器 使用例如HTTP cookie或隐藏变量的辅助会话 在网络表格中。
View state是ASP.NET页面中的存储库,可以存储在回发期间必须保留的值。页面框架使用视图状态在回发之间保持控制设置。
您可以在自己的应用程序中使用视图状态来执行以下操作:
在回发之间保留值,而不将其存储在会话状态或用户个人资料中。
存储您定义的页面或控件属性的值。
注意:建议将大型对象放在ViewState中 ,因为它会增加页面大小并导致页面访问时间增加。 ViewState是不加密,您可以通过将页面的ViewStateEncryptionMode属性设置为true
进行加密。您可以阅读Securing View State了解更多详情。
您还可以使用Session
在Server上存储对象,但如果您有大对象或大量客户端,则会降低性能。在那里你必须考虑你需要什么媒体。是 ViewState ,会话,文件还是数据库等。