У меня есть пользовательский элемент управления (ascx), который реализует интерфейс IPostBackEventHandler для перехвата пользовательских событий, запускаемых пользовательскими отображаемыми ссылками HTML.
В этом элементе управления я использую панель обновления, а внутри панели обновления я использую буквальный элемент управления, в котором я отображаю пользовательские ссылки HTML.
Когда я отображаю HTML-ссылки внутри литерального элемента управления, я использую StringBuilder со следующим кодом:
sb.AppendFormat ("<a href=\"{0}\" id=\"custom_iterator_id\">Text</a>",
this.Page.ClientScript.GetPostBackClientHyperlink(this, custom_string_param));
Гиперссылки отображаются нормально, и при нажатии на них запускается асинхронная обратная передача ичастичное обновление запускается (так как все ссылки отображаются на панели обновлений).
Проблема в том, что мне нужно сделать некоторый пользовательский Javascript перед запуском __doPostBack, который отображается с помощью приведенного выше кода.Итак, вот упрощенная версия измененного кода:
sb.AppendFormat ("<a href=\"javascript:JSFunc{0}\" id=\"custom_iterator_id\">Text</a>",
custom_string_param);
Также в разметке ascx я использую следующий код (внутри или снаружи панели обновления):
<script language="javascript" type="text/javascript">
function JSFunc(param) {
// custom js code here ....
__doPostBack('<%=this.ClientID%>', param);
}
</script>
Проблемаздесь, когда ссылка нажата, она выполняет полную обратную передачу, а не частичную.Я также протестировал более простые версии приведенного выше кода, и кажется, что если вы удалите __doPostBack из ссылки href или onclick из ссылки (тега) и переместите его в пользовательскую функцию js, которая, в свою очередь, вы предоставляете ссылке,полный постбэк срабатывает.
Обратите внимание, что на странице нет ошибок, и в обоих случаях код работает правильно.Страница корректно отображается в зависимости от параметров, возвращаемых из __doPostBack, но во втором случае запускается полная, а не частичная обратная передача.
Есть идеи?
Заранее спасибо,
George