Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
1

Custom server control: происходит полная перезагрузка страницы

16.05.2012, 12:20. Просмотров 1859. Ответов 15
Метки нет (Все метки)

Здравствуйте.

В .aspx странице использую свой Control. Он помещен в UpdatePanel и имеет реализацию события Click. Событие реализовано через функцию onclick="__doPostBack('ctl','Id'). Также в UpdatePanel лежит asp:Button и asp:Label. Label при нажатии на мой контрол и на стандартный баттон изменяет текст. При нажатии на стандартный батон UpdatePanel работает как надо, при нажатии на мой происходит полная перезагрузка страницы. Посмотрел что передается на сервер, мой котрол при сабмите не передает ничего про ScriptManager и __ASYNCPOST, а стандартный Button это передает. Также не могу установить в UpdatePanel триггер на свой контрол, его он просто не видит. Насколько я понимаю, мне необходимо в своем контроле реализовать какой-то аяксовский интерфейс. Если кто-то такое делал, поделитесь...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 12:20
Ответы с готовыми решениями:

Custom Control не выводит HTML текст с ascx-страницы
Создал Custom Control. Для его реализации мне пришлось в CodeBehind-е перегрузить несколько...

Какая разница между Web server control, Composite control и User Control
Подскажите, пожалуйста, какая разница между Web server control, Composite control и User Control, а...

Server.Execute, переменные страницы из которой происходит вызов доступны в исполняемом модуле
В MSDN по Server.Execute написано, что все переменные страницы из которой происходит вызов доступны...

GridView Web Custom Control
Как переопределить Edit button для GridView в Web Custom Control, чтобы вместо линка отображался...

Custom Control, наследующий от Panel
Добрый вечер, под web никогда не работал, возник вопрос. Пишу custom control, наследующий от Panel,...

15
HF
188 / 177 / 58
Регистрация: 09.09.2011
Сообщений: 665
Завершенные тесты: 19
16.05.2012, 15:14 2
Сталкивался (возможно и не точно именно это). У кнопки нужно поставить режим статического ID, так как у него очень сильно "искривляется" имя и скрипт перестаёт определять соответствие между тем что определено как асинхронный запрос и просто постбэк. Происходит обычная перезагрузка.
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
16.05.2012, 15:43  [ТС] 3
Сталкивался (возможно и не точно именно это). У кнопки нужно поставить режим статического ID, так как у него очень сильно "искривляется" имя и скрипт перестаёт определять соответствие между тем что определено как асинхронный запрос и просто постбэк. Происходит обычная перезагрузка.
Не, не то. Но я использую статические ID. Я смотрю значение "Page.Request.Form" после сабмита формы в обоих случаях. И в случае, когда сабмит вызывает мой контрол там просто ничего нет об "ScriptManager" и "__ASYNCPOST", а без этого UpdatePanel соответственно работать не будет, что она успешно и делает.
0
sau
2087 / 1667 / 285
Регистрация: 22.07.2011
Сообщений: 6,386
Завершенные тесты: 1
17.05.2012, 00:48 4
__doPostBack('ctl','Id'). каким образом получаете ?
З.Ы Ничего дополнительно делать не нужно, ajax функции asp net-а перехватывают вызов __doPostBack , смотрят id контролов, если они привязанны к UpdatePanel-и то юзается ajax
0
17.05.2012, 00:48
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
17.05.2012, 08:59  [ТС] 5
__doPostBack('ctl','Id'). каким образом получаете ?
В перегруженом методе "Render" моего контрола есть такое:
C#
1
2
ClientScriptManager cs = Page.ClientScript;
writer.Write(" onclick=\"" + cs.GetPostBackEventReference(this, _Id) + "\">");
что рендерит следующее:
onclick="__doPostBack('ctl','MyID')"

в HTML автоматом появляется:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
И главное, что и сабмит формы срабатывает четко, и я перехватываю на сервере событие "OnClick". Только, хоть мой елемент и находится в UpdatePanel но на сервер про это не приходит ни слова.

З.Ы Ничего дополнительно делать не нужно, ajax функции asp net-а перехватывают вызов __doPostBack , смотрят id контролов, если они привязанны к UpdatePanel-и то юзается ajax
Тогда я вообще не понимаю, почему оно не срабатывает
0
sau
2087 / 1667 / 285
Регистрация: 22.07.2011
Сообщений: 6,386
Завершенные тесты: 1
17.05.2012, 12:45 6
writer.Write(" onclick=\"" + cs.GetPostBackEventReference(this, _Id) + "\">");
Не совсем понял эту строчку, к какому элементу привязан onclick , и как задается _Id ?
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
17.05.2012, 13:30  [ТС] 7
Не совсем понял эту строчку, к какому элементу привязан onclick , и как задается _Id ?
Это строка из перегруженого метода "Render" класа моего контрола, к которому onclick собственно и прикручен. _Id это его внутреннее свойство. Этот контрол создается на странице так:

<CustomControls:MyControl ID="MyControl1" runat="server" Text="Test" OnClick="MyControlClick" />

Который рендерит в HTML уже собственно сам контрол, чтото типа такого:

HTML5
1
<nobr class="тратата" id="MyControl1" onclick="__doPostBack('ctl03','MyControl1')"><span class="тратата">style="тартата">Test</span></nobr>
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
21.05.2012, 14:49  [ТС] 8
Все, нашел. Всем спасибо.
0
sau
2087 / 1667 / 285
Регистрация: 22.07.2011
Сообщений: 6,386
Завершенные тесты: 1
21.05.2012, 17:26 9
В чем была проблема ?
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
22.05.2012, 08:58  [ТС] 10
Когда нужно чтоб твой custom server control работал с UpdatePanel необходимо зарегистрировать для него в ScriptManager асинхронный постбек. Это делается добавлением в Page_Load страницы такой строчки:

C#
1
ScriptManager1.RegisterAsyncPostBackControl(MyServerControlId);
После этого он отлично работает с UpdatePanel и как я понял, должна появиться возможность вешать на него триггер.
0
HF
188 / 177 / 58
Регистрация: 09.09.2011
Сообщений: 665
Завершенные тесты: 19
22.05.2012, 09:12 11
Цитата Сообщение от UserAspNet Посмотреть сообщение
Когда нужно чтоб твой custom server control работал с UpdatePanel необходимо зарегистрировать для него в ScriptManager асинхронный постбек. Это делается добавлением в Page_Load страницы такой строчки:

C#
1
ScriptManager1.RegisterAsyncPostBackControl(MyServerControlId);
После этого он отлично работает с UpdatePanel и как я понял, должна появиться возможность вешать на него триггер.
Цитата Сообщение от UserAspNet Посмотреть сообщение
В .aspx странице использую свой Control. Он помещен в UpdatePanel и имеет реализацию события Click.
А я даже не стал уточнять. У меня так и сделано. Но... если объект помещён в UpdatePanel, то этого делать не нужно. Так как он автоматически становится асинхронным. Такую строчку нужно делать только если он не в UpdatePanel.
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
22.05.2012, 11:54  [ТС] 12
Но у меня именно он помещен в UpdatePanel и не работал, пока не зарегистрировал. Я не понимаю в чем дело, возможно из-за того, что в моем контроле реализован интерфейс IPostBackEventHandler для реализации события на сервере. Не знаю вобщем, но теперь все заработало как надо.
0
sau
2087 / 1667 / 285
Регистрация: 22.07.2011
Сообщений: 6,386
Завершенные тесты: 1
22.05.2012, 14:43 13
Этим методом регистрируются контролы которыми мы хотим инициировать ajax передачу и которые находятся за пределами UpdatePanel-и. - это равносильно установки тригера в UpdatePanel-и.
Предположительно ты регистрируешь не тот идентификатор контрола для обратной передачи. или хз, у меня кустарные контролы работают без проблем по такому принципу.
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
22.05.2012, 15:58  [ТС] 14
Вот когда я пытался сделать триггер на свой контрол, у меня это не получалось. Даже в графическом конструкторе триггеров UpdatePanel моих контролов не было. Я не знаю в чем тут именно дело, но сейчас такая возможность есть.
0
HF
188 / 177 / 58
Регистрация: 09.09.2011
Сообщений: 665
Завершенные тесты: 19
22.05.2012, 18:24 15
Цитата Сообщение от UserAspNet Посмотреть сообщение
Вот когда я пытался сделать триггер на свой контрол, у меня это не получалось. Даже в графическом конструкторе триггеров UpdatePanel моих контролов не было. Я не знаю в чем тут именно дело, но сейчас такая возможность есть.
Тогда я ещё раз хочу повторить свою просьбу и вопрос - Какая стоит настройка для клиентских ID? и рекомендую (и уже интересно самому)
- поставить в свойствах контрола ClientIDMode=Static
- убрать строчку для регистрации асинхронного метода
- снова проверить
было у меня такое. Именно в такой ситуации. А уж если дело в контроле, то там явно ID, Name меняются очень сильно.
КСТАТИ! А ваш контрол был помещён в UpdatePanel в Основной странице? или в коде контрола? Это тоже совершенно разные вещи.
0
UserAspNet
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 9
23.05.2012, 09:19  [ТС] 16
Контрол помещён в UpdatePanel в Основной странице. А по поводу ClientIDMode - я смотрю, что страница при постбеке передает на сервер, и там всегда корректные ID и Name. Устанавливаю его в Static - ничего не меняется. Все равно идет полная перезагрузка. У меня попутный по этому поводу вопрос: Мой контрол наследуется от WebControl, в самом WebControl есть свойство ClientIDMode, наследуемуе от Control, в своем описании контрола мне нужно както указывать что это свойство будет использоваться, тоесть необходимо делать что-то типа явного указание на использование, или оно должно автоматически наследоваться?
0
23.05.2012, 09:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 09:19

При клике на ссылку происходит перезагрузка страницы.
Всем hi:) Вкратце: есть ссылка &lt;a href=&quot;&quot; title=&quot;&quot; onclick=&quot;document.dir.folder.value = '&lt;?...

View Picklist Custom Control
Добрый день. Ребята, нужна ваша помощь или совет. решил у себя сделать кнопку пиклист. Для...

Manifest файл на Custom Control
Всем привет. Меня интересует следующий вопрос: Есть кустомный Edit контрол. Подключив Manifest...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru