ASP.NET - UpdatePanel и JavaScript
Есть ли способ выполнить script, когда процесс UpdatePanel завершен.
У меня есть страница, которая позволяет "вставлять", "копировать" и "редактировать" записи.
Все это делается на UpdatePanel, чтобы предотвратить навигацию по страницам.
Где-то еще на странице я хотел бы напечатать сообщение "flash" - например "Вы успешно вошли в запись". Он не находится рядом с UpdatePanel, и я хотел бы использовать эффект jQuery для сообщения, чтобы он исчезал через 4 секунды. Как я могу отправить script обратно с помощью UpdatePanel или выполнить его после обновления UpdatePanel? Должен ли я писать script в asp: literal? мысли?
Ответы
Ответ 1
Да:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
И затем:
function endRequestHandler(sender, args)
{
// Do stuff
}
Документация здесь и здесь. Имейте в виду, что это будет срабатывать для каждого запроса AJAX на странице.
Ответ 2
Это должно сделать трюк:
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args)
{
//Jquery Call
}
function EndRequestHandler(sender, args)
{
//Jquery Call
}
</script>
Ответ 3
Вот статья о том, как это сделать, используя статический метод ScriptManager RegisterClientScriptBlock. Пробовал и работал как шарм.
http://csharperimage.jeremylikness.com/2009/06/inject-dynamic-javascript-into-aspnet.html
Ответ 4
var requestManager = Sys.WebForms.PageRequestManager.getInstance();
requestManager.add_beginRequest(function () { alert('here1') });
requestManager.add_endRequest(function () { alert(here2') });
Источник: http://www.howtositecore.com/?p=36
Ответ 5
Метод Sys.WebForms.PageRequestManager.getInstance() отлично работает и для меня.
Я работаю с большим количеством страниц, содержащих несколько модулей обновления, и я узнал, что это будет автоматически срабатывать, даже если Updatepanel вы не хотите, чтобы он обновлялся. Поэтому внутри функции, которая запускается в событии, убедитесь, что у вас есть что-то вроде:
function BeginRequestHandler(sender, args) {
if (args.get_postBackElement().id == "ID of the Updatepanel") {
// do stuff here
Ответ 6
Бруно,
Во-первых, чтобы ответить на ваш прямой вопрос. В обратном вызове, который вызывается панелью обновления, вы должны использовать вызов RegisterStartupScript для вызова метода JS. Затем в вашем методе JS вы увидите сообщение, а затем вы можете использовать do:
setTimeout('$('#myMessage').fadeOut("slow")', 4000);
чтобы оно исчезло через 4 секунды.
Чтобы сделать еще один шаг вперед, так как вы уже используете JavaScript, я приглашаю вас проверить эту статью о UpdatePanels. Если возможно, я попытаюсь отправить вызовы Ajax, чтобы выполнить вставку, копирование и редактирование, и это еще больше упростит вашу обратную связь с пользователем и предотвратит избыточную информацию по проводке.