powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / HOT TIP #2 Передача значений между веб-формами в ASP.NET
2 сообщений из 2, страница 1 из 1
HOT TIP #2 Передача значений между веб-формами в ASP.NET
    #32346610
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиски возможных вариантов передачи значений между страницами привели к переводу ещё одной статьи.

HOT TIP №2

Передача значений между веб-формами в ASP.NET

ЯЗЫК: C#
ВЕРСИИ ASP.NET: 1.0 | 1.1
АВТОР: Bipin Joshi, http://www.dotnetbips.com/
ПЕРЕВОД: hDrummer



Вступление
Веб-формы ASP.NET предлагают прекрасную событийно-управляемую программную модель для разработчиков. В целом она упрощает дизайн вашего приложения, но и сама по себе порождает некоторые проблемы. Например, в традиционном ASP можно было легко передавать значения от одной страницы к другой странице с использованием метода POST. Этим подходом нельзя воспользоваться в ASP.NET, если вы хотите использовать модель веб-форм (т.е. форма и элементы управления обрабатываются на стороне сервера). Однако есть несколько подходов, с помощью которых можно преодолеть эти ограничения. Например, значения можно передавать в строке запроса, используя сессионные переменные или с использованием метода Server.Transfer.

Использование строк запроса
Механизм использования строк запроса для передачи значений от страницы к странице не нов. Основным преимуществом этого метода является его простота. Недостатками же являются видимость значений передаваемых переменных в адресной строке и отсутствие возможности передачи таким образом объектов. Наилучшее применение этот метод может получить в случае необходимости передачи небольшого числа значений, которые нет необходимости скрывать. Чтобы воплотить этот метод в жизнь, нужно выполнить следующие шаги:
- создать веб-форму с элементами управления;
- создать кнопку для отсылки формы на сервер (т.н. postback’a);
- в обработчике события onClick создать строку, содержащую URL для перехода;
- добавить значения из элементов управления к нашему URL’у как параметры в строке запроса;
- выполнить Response.Redirect к другой веб-форме по нашему URL.

Следующий кусочек кода покажет, как это работает:

Исходная Web Form’a (передача параметров)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
private void Button1_Click
(object sender, System.EventArgs e)
{
	string url;
	url= "anotherwebform.aspx?name="  + 
		TextBox1.Text +  "&email="  + 
		TextBox2.Text;
	Response.Redirect(url);
}


Web Form’a, на которую уходим (приём и обработка параметров)
Код: plaintext
1.
2.
3.
4.
5.
private void Page_Load
(object sender, System.EventArgs e)
{
	Label1.Text=Request.QueryString[ "name" ];
	Label2.Text=Request.QueryString[ "email" ];
}


Использование переменных сессии
Это ещё один способ передачи значений от страницы к странице. В этом случае мы сохраняем значения в сессионных переменных и получаем к ним доступ из другой веб-формы. Однако, как мы знаем, сохранение большого объёма данных на сервере может привести к его перегрузке (т.е. более медленной работе). Поэтому данный способ нужно применять с осторожностью. Кроме того, необходимы некоторые действия с вашей стороны, для того, чтобы уже ненужные переменные, занимающие много памяти, были очищены. Типичная последовательность действий выглядит так:
- создать веб-форму с элементами управления;
- создать кнопку для отсылки формы на сервер (т.н. postback’a);
- в обработчике события onClick добавить сессионные переменные и установить в некоторые значения;
- выполнить Response.Redirect к другой веб-форме;
-в этой «другой» веб-форме взять значения из переменных сессии и очистить их при необходимости.

Следующий код продемонстрирует сказанное в действии:

Исходная Web Form’a (передача параметров)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
private void Button1_Click
(object sender, System.EventArgs e)
{
	//textbox1 и textbox2 это элементы управления веб-формы
	Session[ "name" ]=TextBox1.Text;
	Session[ "email" ]=TextBox2.Text;
	Server.Transfer( "anotherwebform.aspx" );
}


Web Form’a, на которую уходим (приём, обработка и очистка параметров)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
private void Page_Load
(object sender, System.EventArgs e)
{
	Label1.Text=Session[ "name" ].ToString();
	Label2.Text=Session[ "email" ].ToString();
	Session.Remove( "name" );
	Session.Remove( "email" );
}


Использование Server.Transfer
Это довольно сложный способ передачи значений между страницами. Для передачи значений в другие страницы нужно создать дополнительные свойства класса исходной страницы. Этот метод потребует от вас дополнительного кодирования, но эти усилия будут стоить того. В целом, этот подход более объектно-оринтирован, чем предыдущие методы. Весь процесс выглядит так:
- создать веб-форму с элементами управления;
- создать для свойства процедуру Get, которая будет возвращать значения элементов управления;
- создать кнопку для отсылки формы на сервер (т.н. postback’a);
- в обработчике события onClick вызвать метод Server.Transfer, который передаст выполнение указанной форме;
- во второй форме можно получить ссылку на исходную форму с использованием свойства Context.Handler. Затем можно использовать созданные свойства для получения значений, находящихся в элементах управления формы.

Теперь код:
Исходная Web Form’a (передача параметров)
Добавим следующие свойства к веб-форме:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public string Name
{
	get
	{
		return TextBox1.Text;
	}
}

public string EMail
{
	get
	{
		return TextBox2.Text;
	}
}


Теперь выполним Server.Transfer.
Код: plaintext
1.
2.
3.
4.
private void Button1_Click
(object sender, System.EventArgs e)
{
	Server.Transfer( "anotherwebform.aspx" );
}


Web Form’a, на которую уходим (приём, обработка параметров)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void Page_Load
(object sender, System.EventArgs e)
{
	//create instance of source web form
	WebForm1 wf1;
	//get reference to current handler instance
	wf1=(WebForm1)Context.Handler;
	Label1.Text=wf1.Name;
	Label2.Text=wf1.EMail;
}


Итого
В этой статтье мы рассмотрели три способа передачи данных между двумя ASP.NET веб-страницами – с помощью строки запроса, сессионных переменных и метода Server.Transfer. Также рассмотрели плюсы и минусы всех подходов.
Надеюсь, что эта статья окажется вам полезной.
...
Рейтинг: 0 / 0
HOT TIP #2 Передача значений между веб-формами в ASP.NET
    #32346692
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порадовала помощь по классу Context:

The Context type supports the .NET Framework infrastructure and is not intended to be used directly from your code.

Просто и ясно. И никаких тебе вопросов :(
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / HOT TIP #2 Передача значений между веб-формами в ASP.NET
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]