powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET и Windows формы: передача данных между формами
12 сообщений из 12, страница 1 из 1
ASP.NET и Windows формы: передача данных между формами
    #33988967
FinSoftware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Относительно недавно я приступил к изучению ASP.NET (версии 2.0, в Visual Studio 2005), имея за спиной неплохой опыт работы с Windows Forms.

Я столкнулся со следующими основными проблемами.

1) Проблемы, связанные с разработкой внешнего вида веб формы.

Этим проблемам посвящено предыдущее отправленное мною сообщение. В данном сообщении я рассмотрю проблемы следующей группы.

2) Проблемы, связанные с передачей данных между формами.

В Windows приложениях мы придерживаемся следующего паттерна. Каждая форма у нас является представлением некоторого объекта. При редактировании контролов формы редактируется объект. С другой стороны, контролы на форме настраиваются на основе объекта.

Вот типичная ситуация. У нас есть справочник, например, автомобилей (в таблице отображается список автомобилей). Мы нажимаем на пункт New. Создается new CAuto (), отображается модальная форма frmAuto. Пользователь через контролы настраивает объект Auto, затем форму закрывает. После закрытия модальной формы исполнение кода в форме справочника продолжается, и объект Auto сохраняется в БД. Сценарий такого рода встречается очень часто в Windows приложениях.

Как это сценарий реализовать в ASP.NET приложении? Тут я натолкнулся на такие проблемы.

а) Пусть мы создаем веб форму Auto.aspx для редактирования объекта Auto. Как веб форме передать объект Auto?

Первым делом, конечно, захотелось сделать new AutoPage (Auto), а потом AutoPage.Show (), но оказалось, что это невозможно. То есть конструктора у страниц нет.

Нужно открыть страницу .aspx и передать ей данные. Данные ей можно передать несколькими способами. Через HTTP GET, то есть через строку запроса, сделать это невозможно. Можно вроде через HTTP POST (но как это сделать, я не понял).

Передать объект можно еще следующим способом. Сохраняем объект Auto в сессию (то есть в память сервера), под определенным ключом. Пусть ключ "123". Открываем форму Auto.aspx через Auto.aspx?AutoId=123. Страница откроется, получит по ключу из сессии объект, и сможет с ним работать.

Нет ли лучшего способа решить эту наистандартнейшую (по крайней мере, таковой она является в Windows формах) задачу.

б) Продолжаем рассматривать сценарий. Пусть мы передали объект Auto форме Auto.aspx.

Забыл сказать о том, что эту форму нужно было отобразить в виде отдельного окошка, чтобы она была похожа на модальную форму. Мне уже подсказали, что сделать это можно только через JavaScript. Криво, но иных способов нет.

Мы поработали с формой Auto.aspx, изменили объект Auto. Потом нажали на ней на кнопку OK и хотим, чтобы объект был сохранен в БД. Как это сделать?

Можно просто в этой же форме Auto.aspx в процедуре обработки события нажатия на кнопку сохранить объект в БД. Но с точки зрения хорошего дизайна это плохой подход, потому что форма Auto.aspx должна быть универсальной. Она предназначена только для просмотра и редактирования объекта Auto, ничего другого она делать не должна.

В Windows приложении, пока отображалась модальная форма frmAuto, код в основной форме справочника автомобилей "стоял". Чтобы реализовать это в веб приложении, нужно, получается, перенаправляться к странице Autos.aspx (справочник автомобилей), и возвращать отредактированный объект.

Если напрячь мозги, добиться этой цели можно. Но мне кажется, что наверняка должны быть в ASP.NET некоторые "паттерны" для решения этой и многих других задач. Где можно найти информацию об этих паттернах?

Прошу прощения за большую длину сообщения, но проблема очень важна, и хотелось бы разобраться в этих проблемах.

Заранее спасибо.
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33990515
Gollum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, FinSoftware, Вы писали:

FS>Прошу прощения за большую длину сообщения, но проблема очень важна, и хотелось бы разобраться в этих проблемах.

Лучше всего просто взять книгу про ASP.NET и почитать. Если книги нет, то нужно изучить во-первых как устроены веб-приложения, что такое HTTP Запросы, как устроена клиентская часть и т.п., затем изучить событийную модель веб-приложений и aspx страниц, затем посмотреть архитектурные приемы и паттерны для stateless приложений.Вперед! Бодхисатва, вперед!
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33990607
Dmitry Uvarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+1
подходы слишком разные, нужно просто иначе мыслить, когда программируешь под асп.нет, иначе будут вот такие вот вопросы и рассуждения в заведомо неверном ключе. http://ln.com.ua/~openxs/articles/smart-questions-ru.html
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33990851
cadet354
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, FinSoftware, Вы писали:

FS>Всем привет,

FS>Относительно недавно я приступил к изучению ASP.NET (версии 2.0, в Visual Studio 2005), имея за спиной неплохой опыт работы с Windows Forms.


FS>В Windows приложениях мы придерживаемся следующего паттерна. Каждая форма у нас является представлением некоторого объекта. При редактировании контролов формы редактируется объект. С другой стороны, контролы на форме настраиваются на основе объекта.
в веб аналогично :)
FS>Вот типичная ситуация. У нас есть справочник, например, автомобилей (в таблице отображается список автомобилей). Мы нажимаем на пункт New. Создается new CAuto (), отображается модальная форма frmAuto. Пользователь через контролы настраивает объект Auto, затем форму закрывает. После закрытия модальной формы исполнение кода в форме справочника продолжается, и объект Auto сохраняется в БД. Сценарий такого рода встречается очень часто в Windows приложениях.

если отказаться от идей выскакивания кучи окон, и применить control типа wizard получится не так криво.
А так действительно все, что посоветовал Gollum надо сделать, ключевое слово ИМНО stateless.
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991052
FinSoftware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, FinSoftware, Вы писали:

FS>>Прошу прощения за большую длину сообщения, но проблема очень важна, и хотелось бы разобраться в этих проблемах.

G>Лучше всего просто взять книгу про ASP.NET и почитать. Если книги нет, то нужно изучить во-первых как устроены веб-приложения, что такое HTTP Запросы, как устроена клиентская часть и т.п., затем изучить событийную модель веб-приложений и aspx страниц, затем посмотреть архитектурные приемы и паттерны для stateless приложений.

Да дело в том, что книги по ASP.NET я читал, но ответов на мои вопросы я там не нашел.

Большинство "веб приложений" являются все же прежде всего сайтами. А как только возникает необходимость сделать именно приложение, то сразу возникают проблемы, о которых я написал. Конкретно — меня интересует вопрос проектирования веб форм, связанных с объектом некоторого класса.
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991068
FinSoftware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, FinSoftware, Вы писали:

FS>>Прошу прощения за большую длину сообщения, но проблема очень важна, и хотелось бы разобраться в этих проблемах.

G>Лучше всего просто взять книгу про ASP.NET и почитать. Если книги нет, то нужно изучить во-первых как устроены веб-приложения, что такое HTTP Запросы, как устроена клиентская часть и т.п., затем изучить событийную модель веб-приложений и aspx страниц, затем посмотреть архитектурные приемы и паттерны для stateless приложений.

Вопросик: а что такое stateless приложения? Приложения "без сохранения состояния"? Если это имеет отношение к тому, что нужно мне, где можно почитать про паттерны для таких приложений?
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991143
Gollum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, FinSoftware, Вы писали:

FS>Да дело в том, что книги по ASP.NET я читал, но ответов на мои вопросы я там не нашел.

Видимо плохо искали, так как там есть и про события страницы, и примеры User и Custom Controls, которые можно использовать в качестве View, и примеры простых приложений, в которых так или иначе охватывается актуальная предметная область.

FS>Большинство "веб приложений" являются все же прежде всего сайтами. А как только возникает необходимость сделать именно приложение, то сразу возникают проблемы, о которых я написал.

Вот это мне вообще непонятно.

FS>Конкретно — меня интересует вопрос проектирования веб форм, связанных с объектом некоторого класса.

В самом простом случае это выглядит так: страница загружается, в событии Load мы получаем наш объект, передаем его контролу на странице который умеет его показывать. В еще более простом случае делаем TitleLabel.Text = myObject.Title, CountryList.DataSource = myObject.Countries, и т.п.Исправность аккумулятора можно проверить не выходя из салона, лизнув специально выведенные на приборную доску контакты.
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991144
Gollum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, FinSoftware, Вы писали:

FS>Вопросик: а что такое stateless приложения? Приложения "без сохранения состояния"?

Да. Веб-приложения по своей природе stateless, т.к. они собственно обрабатывают http — запросы и посылают http — ответ, после чего страница прекращает существование.

FS>Если это имеет отношение к тому, что нужно мне, где можно почитать про паттерны для таких приложений?

Думаю, что прочто любая книжка про ASP.NET должна ввести в курс дела. Например, здесь. Паттерны для веб-приложений:

Web Presentation Patterns

Вот еще ссылки:

http://www.rsdn.ru/article/inet/asp20start.xml
http://www.rsdn.ru/article/inet/aspnet20state.xml

Перевод кривой, но понять можно.Это в голове у него перекос — параллакс...
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991225
FinSoftware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, FinSoftware, Вы писали:

FS>>Да дело в том, что книги по ASP.NET я читал, но ответов на мои вопросы я там не нашел.

G>Видимо плохо искали, так как там есть и про события страницы, и примеры User и Custom Controls, которые можно использовать в качестве View, и примеры простых приложений, в которых так или иначе охватывается актуальная предметная область.

FS>>Большинство "веб приложений" являются все же прежде всего сайтами. А как только возникает необходимость сделать именно приложение, то сразу возникают проблемы, о которых я написал.

G>Вот это мне вообще непонятно.

FS>>Конкретно — меня интересует вопрос проектирования веб форм, связанных с объектом некоторого класса.

G>В самом простом случае это выглядит так: страница загружается, в событии Load мы получаем наш объект, передаем его контролу на странице который умеет его показывать. В еще более простом случае делаем TitleLabel.Text = myObject.Title, CountryList.DataSource = myObject.Countries, и т.п.

Обо всем это я тоже знаю, с этим проблем нет. ОК, задаю тогда совсем конкретные вопросы — наверное, так будет проще получить желаемую информацию.

1) Пусть у меня есть страница Auto1.aspx, в ней я через контролы отредактировал свойства объекта Auto. Потом я хочу открыть форму Auto2.aspx и передать объект Auto, который я отредактировал в Auto1.aspx. Как мне это сделать?

2) Я получаю объект Auto в странице Auto2.aspx и редактирую его там. Потом я хочу закрыть форму Auto2.aspx, вернуться к форме Auto1.aspx, и хочу, чтобы там у меня объект Auto оказался обновленным (чтобы изменения, сделанные в Auto2.aspx, сохранились).

Еще забыл сказать, что я хочу, чтобы форма Auto2.aspx отобразилась через скрипт window.open, то есть выглядела бы как "модальная".

Реализовать такое приложение я могу, но получится кривовато. Не хочется, чтобы между формами Auto1.aspx и Auto2.aspx была жесткая связь. Это две независимые формы, и каждая из них является представлением объекта Auto. То есть писать в форме Auto2.aspx код вроде "Redirect("Auto1.aspx") не нужно.

Как КРАСИВО и грамотно запрограммировать этот простейший кейс?
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991256
Gollum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, FinSoftware, Вы писали:

FS>Обо всем это я тоже знаю, с этим проблем нет. ОК, задаю тогда совсем конкретные вопросы — наверное, так будет проще получить желаемую информацию.

Ок. Избегайте пожалуйста излишнего цитирования.

FS>1) Пусть у меня есть страница Auto1.aspx, в ней я через контролы отредактировал свойства объекта Auto. Потом я хочу открыть форму Auto2.aspx и передать объект Auto, который я отредактировал в Auto1.aspx. Как мне это сделать?

Сохранить его куда-либо (БД, другие хранилища типа ViewState, Cache, Session) и передавать Id сохраненного объекта или сам объект. Передавать объект в Contest.Items используя Server.Transfer.

FS>2) Я получаю объект Auto в странице Auto2.aspx и редактирую его там. Потом я хочу закрыть форму Auto2.aspx, вернуться к форме Auto1.aspx, и хочу, чтобы там у меня объект Auto оказался обновленным (чтобы изменения, сделанные в Auto2.aspx, сохранились).

Cохранить объект Auto там, откуда его получает Auto1.aspx. Все реакции у клиента (закрытие, открытие диалогов и т.п.) делаются на клиенте на javascript. Можно из скрипта инициировать постбэк или даже нажатие на кнопку — см. методы GetPostBackEventReference, GetPostBackClientEvent.

FS>Еще забыл сказать, что я хочу, чтобы форма Auto2.aspx отобразилась через скрипт window.open, то есть выглядела бы как "модальная".

window.open не дает модальности. В Internet Explorer существуют методы showModalDialog, которые блокируют выполнение скрипта на родительской странице. Можно еще показывая скрытый div имитировать модальное окно на javascript. В любом случае порядок действий такой: а) открыли окно, б) получили результат, в) отрефрешили родительскую страницу. Можно использовать бибилотеки типа Atlas.

FS>Реализовать такое приложение я могу, но получится кривовато. Не хочется, чтобы между формами Auto1.aspx и Auto2.aspx была жесткая связь. Это две независимые формы, и каждая из них является представлением объекта Auto. То есть писать в форме Auto2.aspx код вроде "Redirect("Auto1.aspx") не нужно.

Да, и поэтому нужно пытаться реализовать что-то типа MVP или MVC. Есть даже Microsoft User Interface Processing Application Block, в котором есть попытка чтото такое изобрести. В любом случае архитектурные принципы стандартные, просто нужно учитывать cпецифику веб-приложения.

FS>Как КРАСИВО и грамотно запрограммировать этот простейший кейс?

Для примера можно скачать исходники communityserver.org и посмотреть как это делают они.Круглое — носить, квадратное — катать!
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991264
FinSoftware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, буду думать и разбирать то, что вы написали, и если еще будут вопросы, напишу.

Спасибо большое за детальные разъяснения :)
...
Рейтинг: 0 / 0
ASP.NET и Windows формы: передача данных между формами
    #33991324
Gollum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, FinSoftware, Вы писали:

FS>Спасибо большое за детальные разъяснения :)

Не за что. Главное что при переходе с разработки desktop приложений надо помнить, что тут клиент — это веб-браузер, получающий по http html cо скриптами (что привносит ощутимые трудности в разработке). И что на сервере страницы не живут, а создаются и уничтожаются, и в конечном счете они всего лишь генерируют вышеупомянтуый html.
После этого становится более менее понятно в каком контексте применять привычные архитектурные навыки.Ph'nglui mglw'nafh Cthulhu R'lyeh wagn'nagl fhtagn
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET и Windows формы: передача данных между формами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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