Я хочу использовать Thickbox (или один из вариантов) на нашем сайте для отображения информационных сообщений, возвращаемых с сервера. Примеры включают предупреждающие сообщения, возвращаемые из логики biz и т. Д.
Первым местом, где эта функциональность понадобится, будут кнопки навигации на элементе управления asp: wizard. Когда пользователь пытается двигаться вперед, мы проверяем его выбор продукта и можем получать сообщения, которые нам нужно отобразить.
Для тестирования, так как я новичок в JQuery и Thickbox, я создал тестовую страницу. Соответствующая часть ниже:
<asp:Panel runat="server" ID="pnl" Visible="false" style="display:none;background-color:Black;">
<div style="background-color:Black; width=300; height=200; ">
<asp:Label runat="server" ID="lblMessage" ForeColor="White" />
<script language="javascript" type="text/javascript">
function showMessage()
{
tb_show("Message", "#TB_inline?height=200&width=300&inlineId=<%# me.pnl.ClientID %>", null);
}
$(document).ready(function() { showMessage(); });
</script>
</div>
В настоящее время я получаю Thickbox для отображения в IE7, но он удвоился. Я получаю две вертикальные ячейки толщиной, собранные вместе, с кнопками заголовка и закрытия, только у верхнего есть мой контент.
В Chrome, окно получает серый фон, но окно не отображается.
Когда я оборачиваю все это в AJAX UpdatePanel, я ничего не получаю.
Что я делаю не так?
ОК, так что больше информации. Я получил и Thickbox, и еще один, называемый LightView, для своего рода работы. Следующий блок скрипта является статическим на странице (версия Thickbox):
<script type="text/javascript" language="javascript">
function showMessage(sender, args)
{
tb_show("Message", "#TB_inline?height=200&width=300&inlineId=ctl00_ctl00_cph1_cphMain_pnl", null);
}
function StartWatch() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(showMessage);
}
Postback устанавливает текст метки, который находится внутри div, указанного в вызове tb_show. Я получаю, что вызов prm.add_endRequest должен быть вызван до обратной передачи.
Есть несколько проблем. Во-первых, все это слишком сильно зашито - панель asp: и ярлык на странице, прописанный идентификатор div и т. Д.
То, что мы действительно хотим, это иметь возможность вызывать это из любого кода позади, например:
Page.ShowMessage("Hello lightbox!")
Я думаю, что мог бы иметь некоторый скрипт и DIV, содержащиеся в файле главной страницы. Это будет скрыто, пока не будет вызвано.
Однако мне нужно уметь:
а) контроль, когда это произойдет. Не каждый AJAX-запрос (на самом деле, большинство не будет) должен иметь сообщение, отображаемое при его возврате. Поэтому мне не нужно было бы вызывать метод endRequest или иметь метод endRequest, проверяющий что-то, что возвращается из вызова AJAX, чтобы определить, действительно ли ему нужно вызывать showMessage ().
б) Мне нужно найти способ, чтобы UpdatePanel содержала что-то вместе с сообщением. Если бы я мог выполнить строку JavaScript, которая бы обновляла скрытое или устанавливало содержимое скрытого сообщения DIV ДО вызова метода showMessage (), я думаю, что было бы хорошо пойти.
Надстройка Thickbox использует JQuery, Lightview использует прототип и скрипт. Lightview гораздо интереснее - лучшие изображения, анимация и т. Д. Мне все равно, какие.
Я использую инфраструктуру AJAX (Atlas), встроенную в .NET.