Использование ASP.NET Cache / ViewState / Session - PullRequest
2 голосов
/ 26 апреля 2011

Я пытаюсь узнать о Cache, Page ViewState и Session. Я создал веб-приложение ASP.NET в VS2010 и добавил 3 текстовых поля и кнопку на страницу. Я бегу в режиме отладки, вводю в каждый случайный текст, нажимаю кнопку, и кажется, что ничего не сохраняется (весь текст «нулевой», как вы увидите в коде). Я выполняю эти действия не в том месте? Нужно ли что-то добавить в 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 ]

1 голос
/ 26 апреля 2011

Прямо сейчас, каждый раз, когда вы нажимаете кнопку, код в вашей процедуре Page_Load перезаписывает значения TextBox.Text до того, как событие Button1_Click получит шанс сохранить их.

Если вы измените if (IsPostBack) на if (!IsPostBack), значения будут пытаться загружаться из сессии / представления состояния / кэша только при первоначальном запросе страницы. Поэтому вам нужно будет запросить страницу, установить новые значения с помощью кнопки, а затем повторно запросить (введите ключ в адресной строке), чтобы запустить код в Page_Load.

Я бы предложил создать новую кнопку под названием «Load Values», чье событие Click запустит код, найденный в настоящее время в вашей Page_Load. Таким образом, вам не нужно привязывать этот код к тому, был ли запрос постбэком или нет. Я думаю, это значительно облегчит понимание результатов вашего теста.

1 голос
/ 26 апреля 2011

Page_Load происходит раньше Button1_Click. Поэтому на Page_Load вы всегда заменяете текстовое поле чем-то из пакетов состояния (сначала "null", а затем "(Cache)" + "null" и т. Д.). То, что вы вводите в текстовые поля, никогда не доживет до Button1_Click.

Вместо этого используйте Page_PreRender.

...