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>
Недавно у меня возникла необходимость динамически подгружать пользовательские контролы на ...
Юнит-тесты это то, на что никогда нет времени. А если есть время, то нет желания. И наконец, ес...