|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Элементы управления и использование JavaScript
Callback с параметрами
Теперь создадим страницу, которая использует обратный вызов с параметром. Наверху страницу поставим выпадающий список городов, который заполняется из web-сервиса, кнопку и строку ввода только для чтения для результата обратного вызова.
Страница просит выбрать город и вызывает серверный скрипт, чтобы запустить запрос к XML web-сервису на сервере. Web-сервис возвращает прогноз погоды для данной местности в текстовом формате:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Callback.aspx.cs" Inherits="Callback" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Web Service Callback с параметром</title>
<script type="text/javascript">
function GetTemp()
{
var City = document.forms[0].DropDownListCity.value;
UseCallback(City, "");
}
function GetTempFromServer(TextBox2, context)
{
document.forms[0].TextBox2.value = "В городе " +
document.forms[0].DropDownListCity.value + " температура
воздуха " + TextBox2;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownListCity" runat="server">
</asp:DropDownList>
<br />
<input id="Button1" type="button" value="Get Temp"
onclick="GetTemp()"/><br />
<asp:TextBox ID="TextBox2" runat="server" Width="634px"
BackColor="#FFFFC0" Height="34px"
ReadOnly="True"></asp:TextBox></div>
</form>
</body>
</html>
using System;
using System.Xml;
public partial class Callback : System.Web.UI.Page,
System.Web.UI.ICallbackEventHandler
{
string _callbackResult;
protected void Page_Load(object sender, EventArgs e)
{
GlobalWeather ws = new GlobalWeather();
string results = ws.GetCitiesByCountry("Russia");
XmlDocument doc = new XmlDocument();
doc.LoadXml(results);
XmlNode child = doc.ChildNodes[0];
foreach (XmlElement el in child.ChildNodes)
{
XmlElement city = el["City"];
DropDownListCity.Items.Add(city.InnerText);
}
string cbReference =
Page.ClientScript.GetCallbackEventReference(this,
"arg", "GetTempFromServer", "context");
string cbScript = "function UseCallback(arg, context)" +
"{" + cbReference + ";" + "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
"UseCallback", cbScript, true);
}
public void RaiseCallbackEvent(string eventArg)
{
GlobalWeather ws = new GlobalWeather();
_callbackResult = ws.GetWeather(eventArg,
"Russia").ToString();
XmlDocument doc = new XmlDocument();
doc.LoadXml(_callbackResult);
XmlNode child = doc.ChildNodes.Item(1);
XmlElement el = child["Temperature"];
_callbackResult = el.InnerText;
}
public string GetCallbackResult()
{
return _callbackResult;
}
}Для работы этого примера нужно создать web-ссылку на сервис "http://www.webservicex.net/globalweather.asmx". Как работать с web-сервисами, описывалось в "лекции 16" .
Разница с клиентским обратным вызовом в том, что этот пример отправляет функции обратного вызова параметр.
Это делается в функции JavaScript GetTemp() на странице .aspx:
function GetTemp()
{
var City = document.forms[0].DropDownListCity.value;
UseCallback(City, "");
}Функция JavaScript читает значение, выбранное в DropDownListCity, и использует в качестве аргумента функции обратного вызова. Этот пример, как и предыдущий, обновляет страницу не полностью, а только необходимые ее части.
Заключение
В этом курсе мы затронули только часть возможностей ASP .NET 2.0. В последнее время широко пропагандируется технология Ajax и основанная на ней технология Atlas от Microsoft. Объявлено о выходе .NET Framework 3.0. Поэтому и мне, и вам предстоит еще многому научиться.