Обмен данными с элементом страницы

  • Автор темы Infra-Red
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

Infra-Red

#1
Всем привет!

Пишу прогу на C#.

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

LuMee

Well-known member
02.05.2006
477
0
#2
Не совсем понятно, куда ты собираешься сливать содержимое поля и что думаешь с ним делать.
Первое, что приходит в голову - использование JavaScript. У поля есть его id, по которому всегда можно обратиться к полю с помощью метода document.getElementById, считать текст, перемолоть его, как надо, вставить обратно. Тут вся обработка происходит на клиенте, так что не знаю, подойдет или нет.
Можно модернизировать данный вариант, задействовав AJAX: тут надо копать в сторону JavaScript-объекта XmlHttpRequest (вроде так).
Еще вариант: просто засабмитить форму, обработать ее на сервере, занести в нужные поля нужные значения, а потом вернуть пользователя на эту же страницу (насколько помню, он по умолчанию туда вернется, если ты явно не сделал Redirect).
 
I

Infra-Red

#3
Тут не важно куда считывать. Как считывать я представляю, я просто не знал как обратиться к определенному полю на страничке, ты вроде как подсказал, щас покопаю в этом направлении, а если есть какой-то примерчик этого было бы вообше супер :rolleyes: А вообше програма должна заменять "нот фаунд" на "фаунд" в случае фаунд если заметили )
 
I

Infra-Red

#4
а document.getElementById это метод какого класса? че-то я ничего такого нарыть не могу, заранее извиняюсь если че не так, в шарпе я новичек и еще слабовато разбираюсь.
 
I

Infra-Red

#5
попытка номер 2 ))

В реале все происходит так - я захожу на страничку, заменяю некоторые значения нажимаю на кнопку "сейв" и страничка по новой сохраняется(я так понимаю на сервере). Мне надо чтоб моя программа заходила на ту же страничку и делала тоже самое. Процесс аналогичен тому как вы отвечаете в теме - набираете текст и жмете на "отправить"...а поблема в том, что я не знаю как обратиться к определенной форме. считать хтмпл текст и вынуть оттуда нужное это пол беды, но как потом обратно записать то, что я наредактирую...пока я вижу решение в том, чтоб обратиться в нужную форму, записать данные в нее и програмно нажать "сейв"
 
M
#6
Это на чужой странице ваша программа что-то должна делать программно, я так понял?

Если да, то:
1. Находим хэндл эксплорера.
2. Находим в эксплорере окно по укзанному пути - "Shell DocObject View" -> "Internet Explorer_Server" -> "Shell Embedding"
3. Получаем IHTMLDocument2 интерфейс:

Код:
IHTMLDocument2 ptr;
IntPtr hWnd = GetShellEmbaddingWindow();	
uint nMsg = Win32.RegisterWindowMessage("WM_HTML_GETOBJECT");
UIntPtr lRes;
if ( Win32.SendMessageTimeout(hWnd, nMsg, UIntPtr.Zero, IntPtr.Zero, 
Win32.SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, out lRes) == IntPtr.Zero )
return null;

ptr = Win32.ObjectFromLresult(lRes, typeof(mshtml.IHTMLDocument2).GUID, IntPtr.Zero) as IHTMLDocument2;

return ptr;
Win32 это класс со статическими Win32 API функциями.

4. Читаем литературу как работать с IHTMLDocument2 интерфейсом :D

Надеюсь поможет.
 
Статус
Закрыто для дальнейших ответов.