Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: web app: проблема с выводом информации в textBox  (Прочитано 6831 раз)
0 Пользователей и 1 Гость смотрят эту тему.
chuprinka
Новенький

ru
Offline Offline

« : 16-03-2012 12:10 » 

Добрый день,

я столкнулась со следующей проблемой, у меня есть web application, на которой есть 4 textbox для ввода информации, button и textBox - для вывода информации.
По click на button, срабатывает событие, код представлен ниже
        protected void Button1_Click(object sender, EventArgs e)
        {
            string sourceDomain = TextBox1.Text;
            string sourceOrganization = TextBox2.Text;
            string targetDomain = TextBox3.Text;
            string targetAccount = TextBox4.Text;
                       
            initilaze = new Initialize(sourceDomain, sourceOrganization, targetDomain, targetAccount, TextBox6);
            initilaze.CompareAttributes();         
        }
Выполнение этих методов занимает минуты 3-4, таким образом информация в TextBox6 выведется только после отработки Button1_Click события.
В десктопных приложениях этf проблема решалось использованием InvokeRequired и текст выводился по мере его добавления в textBox.

Для web app я прочитала, что есть связка ScriptMaster, UpdatePanel, Timer и хотела сделать следующим образом, чтобы через каждые 5 секунд, UpdatePanel обновлялась и содержимое TextBox6 выводилось. Но я столкнулась с тем же результатом, текст в TextBox выводится только после отработки события.
Ниже приведено описание формы

        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <asp:Button ID="Button1" runat="server" Text="CompareAttributes" onclick="Button1_Click" onclientclick="Button1_Click" Font-Size="Small" Width="242px" />
                   <asp:TextBox ID="TextBox6" runat="server" Height="188px" Width="880px"
                    TextMode="MultiLine" AutoPostBack="True"></asp:TextBox>
                <br />
            </ContentTemplate>
        </asp:UpdatePanel>


Пожалуйста, подкиньте идей, подскажите, в чем моя ошибка и как можно решить данную проблему.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-03-2012 14:30 » 

Тут нужно понимать, как работает вся инфраструктура.

Перво-наперво, протокол HTTP 1.1 работает обычно с использованием сессий. Т.е. из браузера к серверу устанавливается TCP-соединение, по которому последовательно передаются HTTP-запросы.

Соответственно, пока предыдущий запрос не отработал, все последующие запросы "стоят" в очереди.

Это создаёт проблему при разработке "классических" веб-приложений в случае либо длительно обрабатываемых запросов (твой случай), либо длительной передачи данных (обычно загрузка и скачивание файлов).

В новой модели веб-приложений, использующих AJAX, обе проблемы могут быть решены, если на стороне сервера запросы обрабатываются веб-сервисом без сессии, как это было когда-то давно в HTTP 1.0. Это несколько медленнее с точки зрения передачи данных, т.к. требует на каждый запрос создавать отдельное TCP-соединение, зато развязывает проблему "параллельности" нескольких запросов.

В "классической" модели веб-приложений проблема долгой передачи данных разрешается с помощью механизма частичных запросов, поддерживаемого HTTP 1.1 (его активно используют разные "качалки", ведущие закачку файлов в несколько параллельных потоков). Для веб-приложения запросы частей файла (или потока данных) могут чередоваться со вспомогательными запросами (например, получение статуса текущих процессов, прогресса и т.п.).

Проблема же долгой обработки запроса в "классической" модели решается совсем просто: посланный из браузера запрос запускает на сервере асинхронную задачу и тут же возвращает ответ (например со статусом или прогрессом операции); дальше из браузера JavaScript по таймеру периодически посылает запросы на сервер с целью обновить статус операции. И в конце концов получает ответ, что операция была завершена. Неудобство тут в том, что без AJAX вся страница будет периодически "моргать" сбрасывая фокус ввода в пользовательской форме (если она есть).

Вот это возможные пути решения проблемы. Скажи, какой тебе больше нравится, и потом детализируем его реализацию.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
chuprinka
Новенький

ru
Offline Offline

« Ответ #2 : 16-03-2012 15:11 » 

Спасибо за быстрый отклик, я бы хотела попробовать использовать AJAX, пожалуйста, подскажи, с чего мне начать
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 16-03-2012 18:02 » 

chuprinka, ASP.NET, начиная с той версии, которая входит в VS 2008, поддерживает AJAX. Однако, разумеется, AJAX там "упрятан" в недра самого ASP.NET.

Начать можно с создания AJAX веб-страницы. Разобраться, как и что в ней работает.

Краткая суть AJAX:

Браузер заходит на некую страничку, содержащую богатый JavaScript-код. Этот код выстраивает динамический HTML страницы - формирует её внешний вид, обрабатывает все действия пользователя и т.п.: является так называемым "толстым" клиентом при "тонком" сервере. Это принципиально отличается от "классических" веб-приложений, где HTML-код формируется на стороне сервера по результатам запросов. По мере реализации логики работы динамической веб-страницы JavaScript-код посылает серверу асинхронные запросы либо на получение данных, либо отсылая пользовательские данные. Делается это в "фоновом" режиме: страница не перезагружается с сервера.

Поскольку ASP.NET исторически возникла как фреймворк для "классических" веб-приложений, в ней сохранилась "классическая" вёрстка HTML-страниц с веб-контролами ASP.NET - вроде той, которую ты привела. (Причём уже по тэгу ScriptManager видно, что у тебя нужная версия ASP.NET.) Это несколько сбивает с толку разработчиков, поскольку мешает им переключить свои мозги на динамический HTML, но в общем и целом жить можно. Принципиальная разница между обычной веб-страницей и AJAX веб-страницей начинается уже с того, что обработчики "кликов" на контролах у первой расположены в серверном коде (на C#), а у второй - в клиентском (на JavaScript). ASP.NET "прячет" от разработчика механизм общения браузера с сервером: все сопутствующие клиентские скрипты и серверный код генерируются автоматически, так что можно сосредоточиться на прикладной задаче.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines