Можно ли поставить переменную только для следующего запроса? - PullRequest
0 голосов
/ 03 апреля 2012

Я бы хотел сделать это:

  1. Простой запрос к серверу;
  2. Поместите переменную, которая будет видна ТОЛЬКО для следующего запроса;
  3. Сделать перенаправление (Response.Redirect, без какой-либо строки запроса);
  4. Ну, страница, которую я посмотрю, вызывается предыдущим «запросом»: теперь я получу доступ к переменной, хранящейся в точке (2). Переменная теперь будет уничтожена;
  5. Ни один другой запрос не может найти эту переменную, пока я не вызову ту же страницу точки (1);

есть ли механизм для этого? без системы запросов ... Я знаю, что в .NET есть много областей ...

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012

Да, это можно сделать.

  1. Создать страницу (или действие контроллера, если используется MVC) для получения данных.Если вы используете HTTP-запрос GET, пара ключ-значение будет в строке запроса.Если вы используете HTTP POST, пара ключ-значение будет частью данных поста (форм).
  2. Как только вы получите пару ключ-значение, сохраните данные в некотором постоянном месте, напримерсеанс или база данных.
  3. Перенаправление на новую страницу.
  4. На новой странице извлеките данные из постоянного хранилища и обработайте их.
3 голосов
/ 03 апреля 2012

Если вы используете ASP.NET MVC3, для этого есть специальная коллекция, которая называется TempData.Все, что вы вставили туда, доступно для следующего запроса, но больше не нужно.

Для веб-форм здесь есть двойной вопрос на SO: Объект типа TempData в WebForms - состояние сеанса только для 1 дополнительного запроса

0 голосов
/ 03 апреля 2012

Если Response.Redirect не установлено в камне, вы можете использовать Server.Transfer вместо Page.PreviousPage для прямого доступа к первой странице.

При использовании метода передачи или публикации на нескольких страницах для передачи обработка от одной страницы ASP.NET до другой, исходная страница содержит информацию запроса, которая может потребоваться для целевая страница. Вы можете использовать свойство PreviousPage для доступа к этому информация.

Если текущая страница отображается в результате прямого запроса (не перевод или кросс-пост с другой страницы), Предыдущая страница свойство содержит ноль.

Например, на первой странице ( RedirectForm.aspx ):

public String Value { get; set; }

protected void BtnTransfer_Click(object sender, EventArgs e)
{
    Value = "Foo";
    Server.Transfer("Transfer.aspx");
}

и Transfer.aspx:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.PreviousPage != null)
    {
        RedirectForm prev = (RedirectForm)Page.PreviousPage;
        String prevValue = prev.Value;  // "Foo"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...