Как сохранять переменные для каждого сеанса пользователя на странице
-
10-12-2019 - |
Вопрос
Я использую три веб-части.Веб-часть A создает значение, когда пользователь нажимает кнопку в веб-части A.Веб-часть B использует это значение для создания списка элементов, которые пользователь может выбрать.WebPart C использует оба значения для создания строки в целях тестирования.
Веб-часть B использует этот список для заполнения раскрывающегося списка.При каждом изменении выбранного значения необходимо обновить веб-часть C.Это декларация элемента управления.
_documentTypeList = new DropDownList();
_documentTypeList.AutoPostBack = true;
this.Controls.Add(_documentTypeList);
Проблема здесь в том, что использование
_documentTypeList.AutoPostBack = true;
перезагружает всю страницу и сбрасывает значение в веб-части A на ноль.Как отправить новое значение веб-части B в веб-часть C, не теряя значения веб-части A?Все это происходит на 1 странице.
Решение
сохранение переменных состояния сеанса можно выполнить с помощью:
public string Name
{
get
{
return Page.Session["SaveName"] as string;
}
set
{
Page.Session["SaveName"] = value;
}
}
это метод получения/установки для сохранения/получения состояния сеанса
чтобы использовать это, сделайте следующее:
это получает значение из состояния сеанса (должно быть в событии onPreRender, чтобы видеть переменные состояния сеанса)
txtName.Text = Name;
это переходит в состояние сеанса (может быть где угодно, где вы хотите сохранить состояние сеанса)
Name = txtName.Text;
для целочисленного значения:
изменить public string Name
к public int Name
и то же самое касается всего остального, например, логических значений и т. д.
поэтому для int это будет выглядеть так:
public int Name
{
get
{
return Page.Session["SaveName"] as int;
}
set
{
Page.Session["SaveName"] = value;
}
}
Как отмечали другие, для передачи данных между веб-частью вы должны использовать метод iInterface:
предоставить (веб-часть отправляет данные) потребителя (веб-часть, использующая эти данные) и интерфейс, который является связью между веб-частями:
вышеизложенное будет работать на 100% и сохранит ваши значения при обратной передаче :)
на всякий случай, если вам это нужно;) iv разместил несколько ссылок на соединения ниже.
Проблемы с подключаемой веб-частью............................?
и
Соединение между двумя веб-частями
Надеюсь, поможет :)
Другие советы
Вы пробовали if (!Page.IsPostBack) { your code here }
?
Вы пытались создать пользовательские соединения веб-части для вашей цели?Проходя ваше требование, может быть, это наиболее подходящий вариант
Ранее веб-части, где соединены в следующем порядке.
WebPart A => WebPart B
WebPart B => WebPart C
WebPart A => WebPart C
.
Это создало ошибку, если я хотел вызвать оба значения в WebPart C, когда я поменял значение в WebPart B. Всякий раз, когда значение WebPart B было изменено, потребовалось для перезагрузки страницы и для перезагрузки WebPart A., потому что WebPart A имел Значение, которое создается на взаимодействии пользователя, а не на странице Загрузка, значение было потеряно. WebPart B и WebPart C захватили функционируют без значения WebPart A. Если вы хотите сохранить соединение WebPart, как описано выше, пожалуйста, проверьте ответ PrevSharePointMaster.
Потому что в моем случае webpart a создает уникальный токен входа в систему, который я бы не позволил не сохранить его на странице. Я бы предпочел держать его с веб-сайтами. Для этого я изменил связь между ними. Вместо этого выше подключения я использовал следующее соединение.
WebPart A => WebPart B => WebPart C
.
WebPart B Сохраняет значение WebPart a и предоставляет ему вместе со своим собственным значением для WebPart C. Это как интерфейс WebParts B в настоящее время выглядит.
public interface IWebPartB
{
string webPartAValue { get; }
string webPartBValue { get; }
}
.