使用ASP.NET缓存/ViewState/Session
我试图了解缓存、页面视图状态和会话。我在VS2010中创建了一个ASP.NET web应用程序,并在页面中添加了3个文本框和一个按钮。我在调试模式下运行,在每个模式中输入随机文本,按下按钮,似乎什么都没有保存(所有文本都是“null”,如代码中所示)。我是否在错误的地方执行这些操作?我需要在web.config中添加一些内容吗?以下是我正在使用的代码:使用ASP.NET缓存/ViewState/Session,asp.net,session,caching,viewstate,Asp.net,Session,Caching,Viewstate,我试图了解缓存、页面视图状态和会话。我在VS2010中创建了一个ASP.NET web应用程序,并在页面中添加了3个文本框和一个按钮。我在调试模式下运行,在每个模式中输入随机文本,按下按钮,似乎什么都没有保存(所有文本都是“null”,如代码中所示)。我是否在错误的地方执行这些操作?我需要在web.config中添加一些内容吗?以下是我正在使用的代码: protected void Page_Load(object sender, EventArgs e) { i
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (Cache["textbox1"] != null)
TextBox1.Text = (string)Cache["textbox1"];
else
TextBox1.Text = "null";
if (ViewState["textbox2"] != null)
TextBox2.Text = (string)ViewState["textbox2"];
else
TextBox2.Text = "null";
if (Session["textbox3"] != null)
TextBox3.Text = (string)Session["textbox3"];
else
TextBox3.Text = "null";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Cache["textbox1"] = "(Cache) " + TextBox1.Text;
ViewState["textbox2"] = "(VS) " + TextBox2.Text;
Session["textbox3"] = "(Session) " + TextBox3.Text;
}
和页面标题:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="State._Default" EnableSessionState="True" EnableViewState="True" %>
谢谢,很抱歉问你这个菜鸟问题。我对此很陌生。
页面加载
发生在按钮1\u单击
之前。因此,在Page\u Load
上,您总是用国务袋中的内容替换文本框文本(“null”
,然后是“(缓存)”+“null”
等)。在文本框中输入的内容只有在单击按钮1之后才会生效
请改用Page_PreRender。现在,每次单击按钮时,页面加载过程中的代码都会覆盖文本框。按钮1_click事件之前的文本值将有机会保存它们 如果将
If(IsPostBack)
更改为If(!IsPostBack)
,则仅当您最初请求页面时,才会尝试从会话/viewstate/cache加载值。因此,您必须请求页面,使用按钮设置新值,然后重新请求(在地址栏中输入key)以运行页面加载中的代码
我建议您创建一个名为“Load Values”的新按钮,其单击事件将运行当前在页面中找到的代码。这样,您就不必将代码与请求是否为回发联系起来。我认为这会使您的测试结果更容易理解。您介意发布Default.aspx代码的其余部分吗?似乎我对页面生命周期的了解严重不足。将代码移动到OnPreRender完成了我试图做的事情。谢谢洛基和穆罕默德!