Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сымитировать нажатие кнопки / 25 сообщений из 26, страница 1 из 2
26.03.2012, 14:06
    #37723072
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Уважаемые коллеги!
У меня возникла следующая проблема:
На странице имеется ReportViewer и таблица, которая строится javaScript-ом. В ячейках таблицы - даты.
Мне нужно по нажатию на строку таблицы взять записанную в неё дату, и передать её в качестве нового параметра для моего ReportViewer-а.
Для этого использую onclick() для строки таблицы. В javaScript-е выбираю дату и отправляю её на сервер через PageMethod.
Вся загвоздка заключается в том, что для использования WebMethod-а, мне необходимо использовать static-метод, который не может напрямую обращаться к reportViewer.
Привожу код:
Нажимаю на строку таблицы
Код: javascript
1.
2.
3.
function report() {
    PageMethods.Report(this.cells[0].innerText);    
}


Код на сервере:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        [WebMethod]
         static public void Report(string D)
        {
            ReportParameter p1 = new ReportParameter("date2", D);
            WF_Ctrl_UGP wf = new WF_Ctrl_UGP();
            wf.ReportViewer1.ServerReport.ReportPath = "/Отчёты/new/Рапорт"; // здесь он говорит, что wf.ReportViewer1 = null
            wf.ReportViewer1.ServerReport.SetParameters(new ReportParameter[] { p1 });
        }


Если сделать таким образом
Код: c#
1.
2.
3.
4.
5.
6.
        public void Report(string D)
        {
            ReportParameter p1 = new ReportParameter("date2", D);
            ReportViewer1.ServerReport.ReportPath = "/Отчёты/new/Рапорт"; // здесь он говорит, что wf.ReportViewer1 = null
            ReportViewer1.ServerReport.SetParameters(new ReportParameter[] { p1 });
        }


то всё работает, только вот этот код из javascript никак не вызвать, так как WebMethod никак не хочет выполнять нестатичный метод...

Мой план: сделать невидимую кнопку (<asp:Button>), на клик которой повесить нестатичную процедуру (как во втором варианте) и при клике на строку таблицы писать в какой-нибудь "<asp:HiddenField>" мою дату, и потом сымитировать нажатие на кнопку, где реализовать примерно следующее:
Код: c#
1.
2.
3.
4.
5.
6.
        protected void Button2_Click(object sender, EventArgs e)
        {
            ReportParameter p1 = new ReportParameter("date2", HiddenField1.value); // Берем дату из скрытого поля
            ReportViewer1.ServerReport.ReportPath = "/Отчёты/new/Рапорт"; //
            ReportViewer1.ServerReport.SetParameters(new ReportParameter[] { p1 });  
        }


Тогда, предположительно, должно сработать.
Но есть одно "НО": я не знаю, как сымитировать в javascript коде нажатие на кнопку "<asp:Button>", либо не в javascript а в статичном WebMethod-е (но тут он, скорее всего, скажет, что нельзя из статичного метода вызывать нестатичные..., значит, надо имитировать из кода javascript всё-таки...).
Помогите, пожалуйста?
...
Рейтинг: 0 / 0
26.03.2012, 14:11
    #37723081
.
.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild Wolfя не знаю, как сымитировать в javascript коде нажатие на кнопку http://api.jquery.com/click/
...
Рейтинг: 0 / 0
26.03.2012, 14:30
    #37723107
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Там, для jquery. Я его не использую. Глупо, наверно, будет цеплять целую библиотеку, чтоб нажать на одну кнопку ))
...
Рейтинг: 0 / 0
26.03.2012, 14:39
    #37723128
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild WolfТам, для jquery. Я его не использую. Глупо, наверно, будет цеплять целую библиотеку, чтоб нажать на одну кнопку ))
А ещё глупее сымитировать нажатие кнопки, что, скорее всего, не получится. Да и не за чем.
...
Рейтинг: 0 / 0
26.03.2012, 15:06
    #37723201
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
ShSergeWild WolfТам, для jquery. Я его не использую. Глупо, наверно, будет цеплять целую библиотеку, чтоб нажать на одну кнопку ))
А ещё глупее сымитировать нажатие кнопки, что, скорее всего, не получится. Да и не за чем. +1

По сабжу: сЫмитировать можно наверн так: document.getelementById('Button2').click() или кури __doPostBack
По тексту: опять статика, опять зло.. чем вам вебсервисы не подходят?
...
Рейтинг: 0 / 0
26.03.2012, 15:09
    #37723211
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Я считаю, что даже если возникает сама идея - создать костыль, то уже нужно рефакторить, а не нажимать скрытые кнопки, имхо
в будущем ведь сложно поддерживать будет
...
Рейтинг: 0 / 0
26.03.2012, 17:34
    #37723668
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
SanSYS,

__doPostBack тоже хреново рефакторить, Но это - вполне правильное решение.
...
Рейтинг: 0 / 0
27.03.2012, 05:57
    #37724559
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
SanSYSShSergeпропущено...
А ещё глупее сымитировать нажатие кнопки, что, скорее всего, не получится. Да и не за чем. +1
...
По тексту: опять статика, опять зло.. чем вам вебсервисы не подходят?
Okей, согласна, что это костыль, это не есть хорошо. Тогда подскажите, пожалуйста, как эту операцию (описано в первом посте) провернуть через статический вебметод? У меня не получилось. Просто наткнулась на грабли, что в статичном методе никак не обратиться к моему ReportViewer-у и, следовательно не присвоить ему значение параметров.
...
Рейтинг: 0 / 0
27.03.2012, 10:17
    #37724764
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Никогда не работал с ReportViewer, но помню когда-то читал про внеполосные вызовы из страниц ASP.NET . Чем не вариант? :)
...
Рейтинг: 0 / 0
27.03.2012, 11:22
    #37724955
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild Wolf,

Естественно, C# не позволяет статическому методу обращение к не статическому члену.
А чем обосновано применение именно веб-метода? Почему не внедрить LinkButton и не обрабатывать это в постбеке?
Ну, да - постбек. Если это критично - запихать это в UpdatePanel .

Или я читал меж строк...

маленький офтоп
Пример того, что происходит при смешивании мух и котлет (котлеты жужжат и улетают :) ).

Если честно - эту кухню со внедренными методами уже порядком подзабыл: в своих проектах, если AJAX, использую веб-сервисы: гоняю JSON. Вопреки крикам о "тяжеловесности" веб-сервисов, пока такого не заметил. Но это предъявляет требования ко всей архитектуре страницы/проекта.
...
Рейтинг: 0 / 0
27.03.2012, 12:05
    #37725096
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Вот это я топик проморгал!

Wild WolfНа странице имеется ReportViewer и таблица, которая строится javaScript-ом.
...
В javaScript-е выбираю дату и отправляю её на сервер через PageMethod.
...
Хренасе, атец?! Ты бы еще дату отправил через голубиную почту
На кой ляд тут пейдж методы с веб-сервисами, если задача решается тупейшим постбеком на сервер?
...
Рейтинг: 0 / 0
27.03.2012, 12:10
    #37725108
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
МСУВот это я топик проморгал!
...Ща будет море крови
...
Рейтинг: 0 / 0
27.03.2012, 13:11
    #37725258
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
МСУ, а я то думаю, чего молчишь
...
Рейтинг: 0 / 0
27.03.2012, 13:28
    #37725312
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
...
Рейтинг: 0 / 0
27.03.2012, 13:39
    #37725337
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Модератор: Стоим на стрёме
...
Рейтинг: 0 / 0
27.03.2012, 14:35
    #37725442
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
iConstНу, да - постбек. Если это критично - запихать это в UpdatePanel .

В UpdatePanel ReportViewer не работает, всё равно перегружается вся страница. У меня ReportViewer версии 9.0.0.0, Framework 3.5

МСУХренасе, атец?! Ты бы еще дату отправил через голубиную почту
На кой ляд тут пейдж методы с веб-сервисами, если задача решается тупейшим постбеком на сервер?
А Вы всегда были профессионалом в Web-программировании?
Ведь навык приходит с опытом, а если опыта большого нет, вот и приходится выкручиваться "голубиной почтой" c "костылями". Я не могу увидеть сходу решение проблемы. Постбек перегружает целиком страницу, а как я уже написала, UpdatePanel не помогает.
...
Рейтинг: 0 / 0
27.03.2012, 14:38
    #37725455
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild Wolf, да не обижайся ты так
МСУ, это же девушка )
...
Рейтинг: 0 / 0
27.03.2012, 14:52
    #37725495
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
...
Рейтинг: 0 / 0
27.03.2012, 15:30
    #37725588
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild WolfА Вы всегда были профессионалом в Web-программировании?
А Вы всегда были не профессионалом в Web-программировании?
Wild WolfВедь навык приходит с опытом, а если опыта большого нет, вот и приходится выкручиваться "голубиной почтой" c "костылями".
Чтобы не крутиться с костылями, задайте правильно вопрос - как сделать. Подскажем.
Wild WolfЯ не могу увидеть сходу решение проблемы.
См. выше.
Wild WolfПостбек перегружает целиком страницу
И что в этом страшного?
Wild Wolfа как я уже написала, UpdatePanel не помогает.
Так и говорит "Не помогу" ?
...
Рейтинг: 0 / 0
27.03.2012, 15:48
    #37725627
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Кр-р-ови-щ-щ-а!
...
Рейтинг: 0 / 0
28.03.2012, 07:23
    #37726689
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
МСУА Вы всегда были не профессионалом в Web-программировании?

Конечно же нет! Раньше всегда была профи, а потом бац! что-то случилось и вдруг стала задавать такие глупые вопросы. ))
МСУИ что в этом страшного?
Некрасиво. Тыкаешь на строку и моргает вся страница, а потом еще таблицу эту по-новой строить приходится.
МСУТак и говорит "Не помогу" ?
Нет. В том то и дело, хоть бы сказала, что ей надо, чтоб правильно работать. Молчит, как рыба и все равно перегружает страницу целиком...

Вот так выглядит ReportViewer в UpdatePanel.
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
               <ContentTemplate>
                    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" 
                    Font-Size="8pt" InteractiveDeviceInfos="(Коллекция)" 
                    WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Height="600px" 
                    Width="800px" ProcessingMode="Remote">
                    <ServerReport ReportPath="/Отчёты/new/рапорт" 
                        ReportServerUrl="http://seweb/reportserver" />
                    </rsweb:ReportViewer>
                </ContentTemplate>
 </asp:UpdatePanel>


Непонятно, почему не работает частичное обновление...

iConst Настройка ReportViewer для асинхронной подготовки отчетов
Вроде всё настроено: ProcessingMode="Remote"; AsyncRendering="True"; Поиграв с этими свойствами, поняла, что это вроде как просто способ отображения. Типа, если AsyncRendering="True", то в момент формирования отчета "Крутится загрузка" в самом отчёте, а страница загружается сама по себе. Если AsyncRendering="False", то страница формируется полностью только при полном построении отчета. В любом случае она загружается заново.
...
Рейтинг: 0 / 0
28.03.2012, 07:52
    #37726697
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Кто-то сталкивался с этим? http://msdn.microsoft.com/ru-ru/library/dd756405.aspx,- можно задавать параметры на стороне клиента.
Когда пытаюсь сделать на стороне клиента var viewer = $find("<%=ReportViewer1.ClientID %>"); \ либо var viewer = Sys.Application.findComponent("<%=ReportViewer1.ClientID %>"), возвращает viewer = null;
...
Рейтинг: 0 / 0
28.03.2012, 08:01
    #37726701
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild WolfНепонятно, почему не работает частичное обновление...

Кажется, понятно теперь... RV не работает с UpdatePanel (вроде, так написано в документации)
...
Рейтинг: 0 / 0
28.03.2012, 08:08
    #37726706
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
ГОСПОДА! Не читайте мои предыдущие 3 поста, ибо там бред непрофессионала (я не установила триггер на UpdatePanel... :-[ )
...
Рейтинг: 0 / 0
28.03.2012, 11:02
    #37726964
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сымитировать нажатие кнопки
Wild WolfГОСПОДА! Не читайте мои предыдущие 3 поста, ибо там бред непрофессионала (я не установила триггер на UpdatePanel... :-[ )
Молодец, догадалась :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сымитировать нажатие кнопки / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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