Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

<asp:RadioButtonList Runat="server" ID="suitList" autopostback="True">

<asp:ListItem Value="club" Selected="True">Club</asp:ListItem>

<asp:ListItem Value="diamond">Diamond</asp:ListItem>

<asp:ListItem Value="heart">Heart</asp:ListItem>

<asp:ListItem Value="spade">Spade</asp:ListItem>

</asp:RadioButtonList>

 </form>

</BODY>

Нам нужно также добавить обработчик событий для события списка

SelectedIndexChanged
,
который мы можем сделать просто с помощью двойного щелчка мышью на элементе управления в графическом представлении.

Отметим, что нужно задать свойство autopostback этого списка как

true
, так как обработчик события
suitList_SelectedIndexChanged
не будет выполняться на сервере, если обратная отправка не задана, и этот элемент управления не включает обратную отправку по умолчанию.

Для метода

suitList_SelectedIndexChanged
требуется следующий код в
WebForm1.aspx.cs
:

protected void suitList_SelectedIndexChanged(object sender, System.EventArgs e) {

 MyUserControl.Suit = (suit)Enum.Parse(typeof(suit), suitList.SelectedItem.Value);

}

Мы знаем, что атрибуты

value
элементов
<ListItem>
представляют допустимые значения перечисления
suit
, которое было определено ранее, поэтому мы анализируем их просто как типы перечислений (у нас здесь то же пространство имен, поэтому нам не нужно переопределять тип) и используем их как значения свойства
Suit
элемента управления пользователя. Мы преобразуем возвращаемый тип
object
в
suit
с помощью простого синтаксиса преобразования типов, и это невозможно сделать неявно.

Не нужно это усложнять, просто определим одно значение с помощью атрибута

Suit
формы Web, например:

<PCS:UserC1 Runat="server" id="myUserControl" Suit="diamond" />

Процессор ASP.NET достаточно разумен, чтобы получить правильный элемент перечисления из предоставленной строки:

Теперь можно изменять масть при выполнении этого приложения Web:

Затем мы зададим для элемента управления несколько методов. Это снова сделать несложно, нам нужно только добавить методы в класс

PCSUserC1
:

public void Club {

 Suit = suit.club;

}

public void Diamond {

 Suit = suit.diamond;

}

public void Heart {

 Suit = suit.heart;

}

public void Spade {

 Suit = suit.spade;

}

Эти четыре метода —

Club
,
Diamond
,
Heart
и
Spade
— изменяют выведенную на экран масть на ту, которая была указана.

Мы вызываем эти функции из четырех элементов управления на странице

.aspx
:

 <asp:ImaqeButton Runat="server" ID="clubButton"

ImageUrl="CLUB.BMP" OnClick="clubButton_OnClick" />

 <asp:ImageButton Runat="server" ID="diamondButton"

ImageUrl="DIAMOND.BMP" OnСlick="diamondButton_OnClick" />

 <asp:ImageButton Runat="server" ID="heartButton"

ImageUrl="HEART.BMP" OnClick="heartButton_OnClick" />

 <asp:ImageButton Runat="server" ID="spadeButton"

ImageUrl="SPADE.BMP" OnClick="spadeButton_OnClick" />

</form>

С

помощью следующих обработчиков событий:

protected void clubButton_OnClick(object sender, System.Web.UI.ImageClickEventArgs e) {

 myUserControl.Club

}

protected void diamondButton_OnClick(object sender, System.Web.UI.ImageClickEventArgs e) {

 myUserControl.Diamond;

}

protected void heartButton_OnClick(object sender, System.Web.UI.ImageClickEventArgs e) {

 myUserControl.Heart;

}

protected void spadeButton_OnClick(object sender, System.Web.UI.ImageClickEventArgs e) {

 myUserControl.Spade;

}

Теперь мы имеем четыре новые кнопки, которые можно использовать для изменения масти:

Отметим, что эти кнопки не изменяют выбранный переключатель, хотя сделать это было бы достаточно просто.

Теперь, создав элемент управления пользователя, можно использовать его на любой другой странице Web с помощью директивы

<%@ Register %>
и двух файлов исходного кода (
PCSUserC1.ascx
и
PCSUserC1.ascx.cs
), созданных для элемента управления.

Преобразование приложения предварительного заказа мероприятия в элемент управления пользователя

В большинстве случаев преобразование страницы ASP.NET в элемент управления пользователя выполнить легко, так как можно просто скопировать требуемый код в пустые файлы

.ascx
и
ascx.cs
. Можно даже выйти из положения в некоторых случаях, просто изменяя имя файла на
.ascx
, если поместить весь код C# в этот файл, а не использовать режим "code behind".

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

Это приложение использует переменную уровня приложения для множества данных, которая содержит таблицы данных мероприятий, участников и названий помещений. Если желательно использовать эту переменную таким же образом, нам понадобиться в этом проекте поместить код для извлечения множества данных в файле global.asax. То есть нам еще нужно добавить в проект ссылку Web на требуемую службу Web.

Существуют другие изменения, которые необходимо сделать, чтобы учесть факт, что элемент управления имеет базовый класс

UserControl
, а не
Form
. Например,
UserControl
не имеет коллекции
Validators
, поэтому невозможно просмотреть объекты
Validator
в этой коллекции с помощью кода, который использовался ранее:

Поделиться с друзьями: