使用ASP.NET Cache / ViewState / Session

时间:2011-04-26 16:16:07

标签: asp.net session caching viewstate

我正在尝试了解Cache,Page ViewState和Session。我在VS2010中创建了一个ASP.NET Web应用程序,并在页面中添加了3个文本框和一个按钮。我在调试模式下运行,在每个文本中输入随机文本,按下按钮,似乎没有保存任何内容(所有文本都是“null”,正如您将在代码中看到的那样)。我在错误的地方执行这些操作吗?我需要在web.config中添加一些东西吗?这是我正在使用的代码:

    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" %>

谢谢,抱歉新手问题。我对此很陌生。

2 个答案:

答案 0 :(得分:1)

Page_Load发生在Button1_Click之前。因此,在Page_Load上,您总是将文本框文本替换为statebags("null",然后"(Cache)" + "null"等)。您在文本框中输入的内容永远不会存在,直到Button1_Click

改为使用Page_PreRender。

答案 1 :(得分:1)

现在,每次单击按钮时,Page_Load过程中的代码都会覆盖TextBox.Text值,然后Button1_Click事件才有机会保存它们。

如果将if (IsPostBack)更改为if (!IsPostBack),则只会在您最初请求页面时尝试从会话/视图状态/缓存加载这些值。因此,您必须请求页面,使用按钮设置新值,然后重新请求(在地址栏中输入键)以在Page_Load中运行代码。

我建议你创建一个名为“加载值”的新按钮,其Click事件将运行当前在Page_Load中找到的代码。这样您就不必将该代码与请求是否为回发相关联。我认为这会让您的测试结果更容易理解。