Обратный вызов клиента Asp.Net2.0 — очень интересный метод. Он позволяет нам контролировать, какие данные отправлять на сервер, не отправляя всю страницу. В то же время сервер возвращает только те данные, которые вам нужны, не отправляя их обратно. . вся страница.
Прежде всего, нам нужно поговорить об очень важном методе: GetCallbackEventRefernce. Я записал свое понимание. Пожалуйста, укажите на это. Большое спасибо.
GetCallbackEventReference сначала реализует метод RaiseCallbackEvent, который позволяет клиентскому сценарию передавать параметры на сервер, а затем возвращает значение метода RaiseCallBackEvent в параметр, который вы зарегистрировали в методе GetCallbackEventRefernce (на самом деле это также сценарий, который вы хотите написать на клиенте). ). Чтобы вызвать GetCallbackEventRefernce, вы должны передать ему два параметра из клиентского сценария: один — это значение, которое будет передано событию RaiseCallbackEvent, а другой — контекст.
Значение его параметров следующее:
Первый: элемент управления страницы или сервера, который. реализует интерфейс ICallbackEventHandler. Напишите это, чтобы представить предыдущую страницу.
Второй: представляет значение, которое вы хотите передать от клиента методу RaiseCallbackEvent сервера.
Третий: функция js, которую вы хотите написать на клиенте. В то же время сервер также будет передавать вычисленные данные в эту функцию как. параметры этой функции.
Четвертое: я не знаю точно, что означает контекст. Код, который GetCallbackEventRefernce отправляет клиенту, выглядит следующим образом:
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
Итак, что нам следует сделать, чтобы получить запрос от клиент? Как ему позвонить? Я видел три метода:
Первый: написать общедоступную строку в фоновом режиме и назначить ее в Page_Load: =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context" Обратите внимание, что это страница); .ClientScrip, поскольку он вернет ClientScriptManager, который управляет всеми клиентскими скриптами. Затем в событии onclick кнопки на переднем плане <%=эта общедоступная фоновая строка%>. Создайте небольшой экспериментальный код следующим образом:
Frontend ServerTime.aspx: Для удобства удалите много бесполезного HTML-кода
<%@ page Language=". C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %>
<html>
<голова>
<title>Время сервера</title>
<script Language="javascript">
функция GetServerTime()
{
вар сообщение = '';
вар контекст = '';
<%=sCallBackFunctionInvoction%>
}
функция ShowServerTime(timeMessage, context) {
alert('Текущее время на сервере:n' + timeMessage);
}
</скрипт>
</голова>
<тело>
<form id="MainForm" runat="server">
<input type="button" value="Получить время сервера" onclick="GetServerTime();" />
</форма>
</тело>
</html>
Серверная часть:
использование системы;
использование общедоступного частичного класса System.Web.UI
ServerTime_aspx: Page, ICallbackEventHandler;
{
//Обязательно реализуйте оправдание ICallbackEventHandler public string sCallBackFunctionInvoction;
void Page_Load(object sender, System.EventArgs e)
{
sCallBackFunctionInvoction = Page.ClientScript.GetCallbackEventReference(this, «сообщение», «ShowServerTime», «контекст»);
}
Публичная строка RaiseCallbackEvent (строка eventArgument)
{
вернуть DateTime.Now.ToString();
}
}
Запускаем, нажимаем кнопку и результат такой:
Второй метод: В приведенном выше методе мы должны привязать фон к переднему плану, а что, если мы его не привяжем? Мы делаем так:
напрямую используем GetCallbackEventReference в качестве содержимого реализации в js-функции, а затем регистрируем эту js-функцию на клиенте.
Код внешней страницы TestPage:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>
<html>
<голова>
<title>Страница без названия</title>
<тип сценария="текст/javascript">
функциональный тест()
{
var lb = document.getElementById("Select1");
//Раскрывающийся список, который нужно использовать var con = lb.options[lb.selectedIndex].text;
//Получаем текст выбранного вами раскрывающегося списка и затем вызываем CallTheServer, который представляет собой js-функцию, выводящую сервер CallTheServer(con,'');
}
функцияReceiveServerData(rValue)
{
Результаты.innerHTML = rValue;
}
</скрипт>
</голова>
<тело>
<form id="form1" runat="server">
<дел>
<выбрать идентификатор="Выбрать1">
<значение опции=1 selected="selected">Mouse Disciple</option>
<значение опции=2>Мастер У Цива</опция>
</выбрать>
<бр />
<бр />
<input onclick="test()" value="Вернуть текст раскрывающегося списка с сервера" type=button>
<бр />
<бр />
<span ID="Результаты"></span>
<бр />
</дел>
</форма>
</тело>
</html>
Внутренний код:
использование системы;
использование System.Data;
использование System.Configuration;
использование System.Collections;
использование System.Web;
использование System.Web.Security;
использование System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.WebControls.WebParts;
использование System.Web.UI.HtmlControls
общедоступного частичного класса TestPage: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler;
{
protected void Page_Load (отправитель объекта, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(this, «arg», «ReceiveServerData», «context»);
Строка callbackScript;
callbackScript = "функция CallTheServer(arg,context)" +"{ " + cbReference + "} ;";
Page.ClientScript.RegisterStartupScript(this.GetType(), «abcdefg», callbackScript, true);
//Четвертый параметр определяет, следует ли автоматически добавлять в скрипт тег <script type="text/javascript"></script>, его, конечно, необходимо добавить}
публичная строка RaiseCallbackEvent (String eventArgument)
{
return «То, что вы выбрали» + eventArgument;
}
}
Ниже приведен результат выполнения:
Третий тип: первые два — это HTML-элементы управления с <input type="button", а что, если это кнопка сервера? Конечно, вы также можете добавить атрибут onclick кнопки сервера в фоновом режиме.
Внешний код Third.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile=" Third.aspx.cs" Inherits=" Third" %>
<html>
<голова>
<title>Страница без названия</title>
</голова>
<тело>
<form id="form1" runat="server">
<дел>
<выбрать идентификатор="Выбрать1">
<option selected="selected" value=1>Mouse Disciple</option>
<значение опции=2>Мастер У Цива</опция>
</выбрать>
<asp:Button ID="Button1" runat="server" Text="Это кнопка сервера" /></div>
<div id="div1" />
<тип сценария="текст/javascript">
функцияRe(рет)
{
document.getElementById("div1").innerHTML = ret;
оповещение (рет);
}
</скрипт>
</форма>
</тело>
</html>
Код позади:
использование системы;
использование System.Data;
использование System.Configuration;
использование System.Collections;
использование System.Web;
использование System.Web.Security;
использование System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.WebControls.WebParts;
использование
третьего общедоступного частичного класса System.Web.UI.HtmlControls: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler;
{
protected void Page_Load (отправитель объекта, EventArgs e)
{
//Четвертый параметр имеет значение null, поскольку вы больше не можете передавать ему параметры в js string str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1')._
options[document.getElementById('Select1').selectedIndex].text","Re",null);
// return false — предотвратить отправку формы Button1.Attributes.Add("onclick",str+";return false;");
}
#region ICallbackEventHandler Члены
общедоступная строка RaiseCallbackEvent (строка eventArgument)
{
if (eventArgument == "Ученик мыши")
{
return "Мышиный ученик: Жизнь похожа на мышь. Если ты не в сарае, ты в туалете!";
}
еще
{
вернуть «Мастер У Цива: уверенный, самостоятельный, оптимистичный»;
}
}
#конечныйрегион
}
Маленький совет: после того, как вы закончите писать System.Web.UI.ICallbackEventHandler, переместите мышь вверх, и перед System появится небольшая диаграмма. Нажмите на нее, чтобы автоматически записать код RaiseCallbackEvent. Эффект следующий:
Третий чувствует себя хуже всего!