How To: Вызвать Javascript функцию после обновления UpdatePanel
UpdatePanel - это контрол Microsoft ASP.NET AJAX, который позволяет довольно удобно интегрировать AJAX в ваше приложение. Но именно ввиду его удобства и простоты использования со стороны разработчика, некоторые вещи далеко не очевидны. К примеру как вызвать клиентский JavaScript по завершению очередного обновления этой панели?
Трюк заключается в том, чтобы добавить EndRequestHandler в request manager:
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
Вот пример формы с двумя TextBox, куда вы вводите текст, а сервер возвращает длину текста и отображает ее во втором TextBox:
<%@ page language="C#" autoeventwireup="true" codebehind="DemoJScriptUpdate.aspx.cs" inherits="CharterWeb.DemoJScriptUpdate" %>
<script runat="server">
protected void txtDataOnChange(object sender, EventArgs e) {
txtLength.Text = txtData.Text.Length.ToString();
}
</script>
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">
<head id="Head1" runat="server">
<script type="text/javascript">
function EndRequestHandler(sender, args) {
if (args.get_error() == undefined)
alert("Your text has: " + document.getElementById("txtLength").value + " character(s)");
else
alert("There was an error" + args.get_error().message);
}
function load() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
</script>
<form id="form1" runat="server">
<?xml:namespace prefix ="" asp /></asp:scriptmanager id="_scriptManager" runat="server">
<asp:updatepanel id="UpdatePanel1" runat="server">
<contenttemplate>
Write something: </asp:textbox id="txtData" runat="server" autopostback="true" ontextchanged="txtDataOnChange">
<br />
Server says the length is: </asp:textbox id="txtLength" runat="server" autopostback="true">
</contenttemplate>
</asp:updatepanel>
</form> Оригинал
поста, как обычно в моем
блоге.