Передача данных с одной страницы ASP.NET на другую - PullRequest
0 голосов
/ 31 января 2011

Хорошо, это очень распространенный сценарий в веб-разработке с очень распространенным решением.Итак, что я ищу, так это любые альтернативные решения.

У меня есть некоторые данные на PageA, и я перенаправляю на PageB, которая нуждается в этой информации.Я мог бы сохранить его в строке запроса, но давайте представим, что он либо слишком сложный, либо я просто не хочу, чтобы он был в строке запроса.

Поэтому я поместил его в сеанс.И затем, когда я добираюсь до PageB, я получаю это из Сессии.Это то, что мы делаем.

Проблема в том, что Session представляет собой пакет глобальных переменных.И это плохо по всем причинам из учебника, что глобальные переменные плохие.Мы будем в другой части приложения, проверим эту переменную и сделаем некоторые вещи, основываясь на ее значении.Затем мы хотим изменить его, поэтому мы должны выяснить, где он был установлен, только он был установлен ВЕЗДЕ.Теперь нам нужны глубокие знания о том, как пользователь пришел на PageZ, чтобы узнать, кто и что установил эту переменную.

Итак, если я действительно ненавижу глобальные переменные и код спагетти, есть ли альтернативы этому?

Ответы [ 3 ]

2 голосов
/ 31 января 2011

используйте

 Page.PreviousPage

Свойство (Получает страницу, которая передала управление на текущую страницу.)

При некоторых обстоятельствах вы можете хочу разместить одну страницу на другой. Например, вы можете создать многостраничная форма, которая собирает Разная информация на каждой странице. В В этом случае вы можете настроить определенные контроли (те, которые реализуют Интерфейс IButtonControl, такой как Кнопка управления) на странице для публикации другая целевая страница. Это упоминается как межстраничное размещение . Размещение на нескольких страницах обеспечивает некоторые преимущества перед использованием трансфера способ перенаправления на другую страницу.

предположим, что вы перешли с PageA на _PageB:

public partial class _PageB : System.Web.UI.Page
{
    public void Page_Load(object sender, EventArgs e)
    {
        Page PageA = Page.PreviousPage;

        //............... etc
1 голос
/ 31 января 2011

Самое простое решение, я думаю (все еще использует сессию): создать объект, который имеет все, что вы хотите. Сохраните этот объект в сеансе с именем GUID (не для повторного использования). Выполните перенаправление, передав только этот GUID в строке запроса. Тогда вы знаете, как получить доступ к вашим данным, которые вы хотите. Установите на объекте сколько угодно времени.

Это все еще грязно. Но это работает, и не показывает все ваши вещи в строке запроса, плюс другие вещи в вашем приложении не будут искать это конкретное имя сеансового ключа. Им нужно было бы перечислить переменные сеанса, чтобы получить его.

1 голос
/ 31 января 2011

Я не уверен, почему вам нужно знать, кто и что устанавливает переменную, чтобы иметь возможность ее использовать.Но если я правильно понимаю, вы можете просто не любить волшебные строки, которые требует использование Session [].В таком случае, почему бы просто не обернуть объект Session во вспомогательный класс?Может быть что-то вроде:

class SessionHelper{
  const string FAVORITE_COLOR_KEY = "favcolor"
  public static string FavoriteColor {
    get { return Session[FAVORITE_COLOR_KEY]; }
    set { Session[FAVORITE_COLOR_KEY] = value; }
  }
}

Таким образом, вы можете в любое время изменить магическую строку "favcolor" на что угодно и не нарушать код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...