Назад
Создание прибыльного бизнеспроекта на базе сайта

SEO + ASP.NET 4.0 + БИЗНЕСМОДЕЛЬ = ПРИБЫЛЬНЫЙ САЙТ

Инструмент быстрого построения прибыльного онлайн бизнеса своими силами без капиталовложений за 4 месяца все подробности на SEO + ASP.NET 4.0.

Подписка на рассылку

МАГИЯ C#!

Создание вебсайта с формой автоматического приема онлайн платежей по WebMoney!
Ваше имя
Ваш e-mail
Уроки по ASP.NET c# ADO.NET
     

18 видеоуроков
более 5 часов
по созданию сайта,
выполняющего
продажи ваших продуктов (физических/электронных) на полном автомате с личным оповещением на e-mail, а также ...
DVD-курс по C#, .NET

3 часть. Введение в ASP.NET. WebServices Профессиональная подготовка разработчика по языку C# на платформе .NET

asp.net webservices dvd c# gridview Гудок курс Более 65 подробных видео уроков по теоретическим основам технологии сайтостроения ASP.NET и процессу создания и использованию вебсервисов.

DVD-курс по C#, .NET

2А часть. XML/TXT в аспекте ADO.NET Профессиональная подготовка разработчика по языку C# на платформе .NET

xml txt dvd c# ADO ADO.NET Гудок курс 70 подробных видео уроков по работе с форматами xml, txt, по работе с файлами и директориями. Разработка высокоорганизованных свойств для значительного сокращения объема исходного кода и облегчения дальнейшей модификации и многое-многое другое...

DVD-курс по C#, .NET

1 часть. Windows Forms Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок

185 подробнейших уроков (70 часов) лекций в формате видеоуроков по теории языка c# и платформы .NET. Практическое закрепление теоретического материала на примере создания Windows Forms - приложения видеоигры "Tanks"

DVD-курс по C#, .NET

2 часть. ADO.NET/SQL Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок ADO.NET sql

165 подробных видео уроков по созданию приложений распределенных баз данных на примере разработки проектов с использований технологий ADO.NET (Connected model, Disconnected model, Typed DataSet, ...)


Я записываю курсы!
  Курс валют

НБУ курс евро






Cross-Page Posting: Межстраничная отправка данных средствами ASP.NET (передача данных между страницами .aspx)



В прошлой статье по передаче данных между windows forms мы рассмотрели организацию процесса обмена данными между формами Windows Forms

В этой статье мы рассмотрим множество способов для организации межстраничной передачи данных. Другими словами, когда загрузка некоторой страницы так, или иначе происходит с другой страницы и при этом требуется получить данные предыдущей страницы. Когда загрузка некоторой страницы происходит с той же страницы, то получить состояние контролов и данных самой страницы совсем не составляет труда, но ситуация с межстраничной пересылкой для некоторых разработчиков сопряжена с определенными трудностями.

Итак, постановка вопроса.

Есть две страницы Default1.aspx и Default2.aspx. На первой имеется два контрола TextBox1и Button1, на второй TextBox2:

Межстраничная отправка данных asp.net aspx

Требуется отобразить значение, введенное в текстовое поле TextBox1 на первой вебформе, в текстовом поле TextBox2 второй формы.

Вариант 1. Server.Transfer

В первой форме подписываемся на обработчик события нажатия на кнопке и внутри обработчика выполняем Server.Transfer:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default1 : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Server.Transfer("~/Default2.aspx");
    }
}

А у второй формы в методе Page_Load находим контрол первой формы TextBox1:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.TextBox2.Text = 
           (Page.PreviousPage.FindControl("TextBox1") 
               as TextBox).Text;
    }
}

Введя текст в текстовое поле на странице Default1.aspx и нажав на кнопку мы попадем на вторую страницу Default2.aspx, на которой в текстовом поле будет находиться значение из текстбокса первой страницы.

Вариант 2. Response.Redirect

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

public partial class _Default1 : System.Web.UI.Page 
{
   protected void Page_Load(object sender, EventArgs e)
   {
       
   }
   protected void Button1_Click(object sender, EventArgs e)
   {
      Response.Redirect("~/Default2.aspx?val="+TextBox1.Text);
   }
}

А на второй странице вытягиваем значение параметра из строки адреса:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.TextBox2.Text = Request.QueryString["val"];
    }
}

Конечно, метод

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Redirect("~/Default2.aspx?val=" + TextBox1.Text);
}

может достичь того же результата и инструкцией

Server.Transfer("~/Default2.aspx?val=" + TextBox1.Text)

Но в этом случае в строке адреса так и останется название первой страницы, что дизориентирует пользователя, ведь фактически он будет находится на второй странице, а в строке адреса по прежнему отображается первая страница. Зато пользователь не видит какие параметры передаются на вторую страницу, ведь метод Server.Transfer в отличие от Response.Redirect выполняется на сервере, а не на клиенте.

Вариант 3. Session

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

public partial class _Default1 : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //устанавливаем сессию
        Session["Value"] = TextBox1.Text;
        Response.Redirect("~/Default2.aspx"); 
    }
}




public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //считываем сессию
        this.TextBox2.Text = Session["Value"].ToString();
    }
}

Вариант 4. Cвойство PostBackUrl

Кнопке Button1 установите свойство PostBackUrl="~/Default2.aspx". Это всё, что требуется от первой формы:

<body>
    <form id="form2" runat="server">
    <div>
        
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        
        <asp:Button ID="Button1" runat="server" Text="Button" 
             PostBackUrl="~/Default2.aspx" />
        
    </div>
    </form>
</body>

А во второй форме опять таки:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.TextBox2.Text = 
           (Page.PreviousPage.FindControl("TextBox1") 
               as TextBox).Text;
    }
}

Вариант 5. Класс Context

Данный способ является неоправданно редко используемым и самым менее известным. Но в то же время самый интересный. Суть заключается в том, что бы с помощью контекста получить экземпляр первой веб-формы.

Бихай код первой страницы:

public partial class _Default1 : System.Web.UI.Page 
{
    public string TextBox1Value { get; private set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        TextBox1Value = TextBox1.Text;
        Server.Transfer("~/Default2.aspx"); 
    }
}

Здесь мы для наглядности добавили свойство TextBox1Value, а в обработчике Button1_Click устанавливаем его в значение свойства Text текстового поля.

А вот бихайн-код второй страницы:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        _Default1 form1 = (_Default1)Context.Handler;
        this.TextBox2.Text = form1.TextBox1Value;
    }
}

Самое интересное заключено в конструкции _Default1 form1 = (_Default1)Context.Handler;

Как видите для создания экземпляра клсасса _Default1 (первая страница), мы воспользовались отличнейшим классом Context и его свойством Handler.

Но есть еще более простой способ получения экземпляра предыдущей страницы:

_Default1 form1 = (_Default1)PreviousPage;

Какой способ выбирать? Все зависит от ситуации. Каждый из них имеет свои плюсы и свои недостатки. Главное перед выбором одного из вариантов ответьте себе на такие вопросы:

  • Как представлять строку адреса;
  • Отображать ли параметры в строке адреса;
  • Стоит ли получать контролы формы-инициатора отправки запроса;
  • Будет ли работа с полями клсса формы-инициатора;
  • И главное, какой размер передаваемых данных и насколько скрытыми от пользователя они должны быть.


Больше информации читайте по теме:



Оценить статью:

Оценивая статью, Вы подсказываете нам насколько данная информация стала полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала для понимания и простоты его изложения. Дополнительные комментари, вопросы, дополнения и замечания Вы можете указать на странице От Вас

Частичное, или полное копирование материала данной статьи возможно лишь при размещении ссылки на данную страницу.


            
        


        Старальев Женя    15.09.2010 19:54:01
        

Благодарю за статью. Я уже несколько раз возвращался к ней. В принципе все знал, но про последний способ даже не догадывался.


        Морфиус    14.01.2011 0:31:20
        

Супер статья!!! Все в одном месте!




Имя:  


Текст комментариев (не больше 600 знаков):  
введите не более 600 знаков



Введите символы с картинки:
Капча имеет "срок годности". Поэтому, если необходимо обновите страницу.



Сантехник срочно
c# курс Гудок   курс по ASP.NET Гудок   курс по ADO.NET Гудок   курс по XML txt Гудок   курс по рефлексии и многопоточности Гудок