回发后维护数据

时间:2010-11-22 04:39:57

标签: c# asp.net

我创建了一个应用程序,它在启动时从数据库中抓取笑话并在屏幕上显示第一个笑话。现在,当我们点击Next按钮时,它应显示第二个笑话。当我第一次抓住笑话时,我把它们放在一个全局声明的数据表中。为了表明我正在做的第一个笑话:

Title.Value = dt.Rows[0]["joke_title"].ToString();
Detail.Value = dt.Rows[0]["joke_content"].ToString();

现在当我按下Next按钮时,我正在运行这些命令:

Title.Value = dt.Rows[0+1]["joke_title"].ToString();
Detail.Value = dt.Rows[0+1]["joke_content"].ToString();

但是当点击“下一步”按钮时,页面会回发并丢失数据表中的值。如何在不丢失数据表中的数据的情况下解决错误?

3 个答案:

答案 0 :(得分:3)

i put them in a globally declared datatable

此数据表在哪里声明?在你的页面类中?你能告诉我们这段代码吗? 如果它在您的页面类中,则不会在回发中保留。为每个请求重新创建页面类,它不会保留任何状态。

如果要在回发之间维护状态,则必须使用状态管理机制(如Viewstate / Session)才能维护数据表的旧值。

答案 1 :(得分:1)

在呈现页面时,将处理在该页面的类中创建的所有对象。现在发生回发时,数据表不会包含任何数据。要在回发中保留数据,您需要将其存储在某个地方(如InSane所说)。如果数据表包含很少的行,那么最好的方法是使用Session对象。

从数据库中检索行后,将数据表存储到会话中:

Session["myTable"] = dt;

在PageLoad事件处理程序的开头,检查它是否为回发,然后再次从会话中读取数据表:

if(this.IsPostBack == true)
{
     DataTable dt = (DataTable)Session["myTable"];
}
else
{
     // fetch the records from database
}

请注意,数据表不会在会话中可用。

答案 2 :(得分:0)

您也可以使用静态数据表解决此问题。但是,数据表将在所有线程中保持静态。