dotSITE
Учебник по C# Шаблоны проектирования Work in Murano Software.
новости материалы решения форумы группы настройки/о проекте

Обработка событий

Мы живем в эпоху инетерактивных Веб-приложений. Это значит, что мы не только доставляем информацию пользователю, но и позволяем ему контролировать процесс. В настольных приложениях все решается просто, ибо весь код приложения непосредственно доступен. В интернет-приложениях все сложнее - мы не можем непосредственно вызывать код на сервере с клиента. Код на сервере может быть запущен только в ответ на некоторый запрос с клиента.

Рассмотрим сначала как осуществляется обработка пользовательского ввода в настольных приложениях. При нажатии на кнопку, смену активного пункта меню генерируется сообщение о совершении этого действия. Механизм сообщений является очень удобным, в частности, из-за его асинхронности.

При разработке ASP.NET Microsft перенесла идеологию сообщений на Web-приложения. Передача сообщений осуществляется через специальные аттрибуты в запросе. На сервере они декодируются и на основании информации о сообщении вызываются соответствующие обработчики.

При всем этом надо заметить, что со стороны разработчика весь этот механизм крайне прост - во-первых, потому что процесс передачи сообщения скрыт и мы просто говорим "мы хотим обработать это сообщение", а во-вторых благодаря наличию механизма обработки сообщений в .NET Framework, что позволяет обрабатывать эти сообщения как и все другие, к тому же в .NET-языках обработка сообщений интегрирована на уровне синтаксиса.

Разумеется, перенос сообщений на страницы интернет накладывает некоторые ограничения на свободу действия. Например, не стоит обрабатывать сообзщение о перемещении мыши - оно возникает слишком часто.

Для пояснения о том, как обрабатывать сообщения, рассмотрим пример обработки сообщения Click для кнопки.

Рассмотрим страницу со следующим кодом:

<%@ Page Src="separate.cs" Inherits="Separate" %>
<form runat="server">
    <asp:Label id="lblMessage" runat="server" />
    <asp:Button id="btnSubmit" runat="server" onclick="btnSubmit_Click" text="submit" />
</form>
    

К ней прилагается файл с кодом:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public class Separate : Page
{
    protected Label lblMessage;
    protected Button btnSubmit;

    public void btnSubmit_Click( object sender, EventArgs e )
    {
        lblMessage.Text = "Hello, world";
    }
}
    

Мы ее уже рассматривали в предыдущей части, но сейчас мы на нее посмотрим с точки зрения обработки сообщений - а именно - обработка нажатия на кнопку submit. В этой странице продемонстрирован первый способ привязки обработчиков к сообщениям - указание имени обработчика в соответствующем аттрибуте серверного элемента управления. В данном случае - onclick.

Но есть и второй способ (и намного более удобный и гибкий) - привязка обработчиков в коде. Это осуществляется единожды при инициализации страницы. Поясним все в коде - модифицируем нашу страницу, чтобы она использовала второй способ.

<%@ Page Src="separate.cs" Inherits="Separate" %>
<form runat="server">
    <asp:Label id="lblMessage" runat="server" />
    <asp:Button id="btnSubmit" runat="server" text="submit" />
</form>
    

Вот код:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public class Separate : Page
{
    protected Label lblMessage;
    protected Button btnSubmit;

    override protected void OnInit( EventArgs e )
    {
        btnSubmit.Click += new EventHandler(btnSubmit_Click);
    }

    public void btnSubmit_Click( object sender, EventArgs e )
    {
        lblMessage.Text = "Hello, world2";
    }
}
    

Как видно, мы теперь не прописываем аттрибут. а при инициализации страницы добавляем делегата для обработки сообщения.

<< Предыдущая Следующая >>

Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2012 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development