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

на главную - закладки

Жанры

Шрифт:

private static string MONTH_PREFIX = "month_";

private static string YEAR_PREFIX = "year_";

private static string ListItemToOption(SelectListItem item)

{

TagBuilder builder = new TagBuilder("option")

{

InnerHtml = HttpUtility.HtmlEncode(item.Text)

};

if (item.value != null)

builder.Attributes["value"] = item.Value;

if (item.Selected)

builder.Attributes["selected"] = "selected";

return builder.ToString(TagRenderMode.Normal);

}

private static string SelectList(string id,

List<SelectListItem> items)

{

StringBuilder listItemBuilder = new StringBuilder;

foreach (var item in items)

{

listItemBuilder.AppendLine(ListItemToOption(item));

}

TagBuilder tagBuilder = new TagBuilder("select")

{

InnerHtml = listItemBuilder.ToString

};

tagBuilder.Attributes.Add("id", id);

tagBuilder.Attributes.Add("name", id);

return tagBuilder.ToString(TagRenderMode.Normal);

}

public static string DatePicker(this HtmlHelper html, string id)

{

return DatePicker(html, id, String.Empty);

}

public static string DatePicker(this HtmlHelper html,

string id, string text)

{

// buffer

StringBuilder sb = new StringBuilder;

// generate days

List<SelectListItem> days = new List<SelectListItem>;

string dayValue = GetValue(html, DAY_PREFIX + id);

for (int i = 0; i <= 31; i++)

{

days.Add(new SelectListItem

{

Text = (i == 0) ? String.Empty : i.ToString,

Value = i.ToString,

Selected = (dayValue == i.ToString)

});

}

sb.AppendLine(SelectList(DAY_PREFIX + id, days));

// generate months

List<SelectListItem> months = new List<SelectListItem>;

string monthValue = GetValue(html, MONTH_PREFIX + id);

for (int i = 0; i <= 12; i++)

{

months.Add(new SelectListItem

{

Text = (i == 0) ? String.Empty :

DateTimeFormatInfo.CurrentInfo.MonthNames[i — 1],

Value = i.ToString,

Selected = (monthValue == i.ToString)

});

}

sb.AppendLine(SelectList(MONTH_PREFIX + id, months));

// generate years

List<SelectListItem> years = new List<SelectListItem>;

string yearValue = GetValue(html, YEAR_PREFIX + id);

for (int i = 1900; i <= DateTime.Now.Year; i++)

{

years.Add(new SelectListItem

{

Text = (i == 1900) ? String.Empty : i.ToString,

Value = i.ToString,

Selected = (yearValue == i.ToString)

});

}

sb.AppendLine(SelectList(YEAR_PREFIX + id, years));

// parent tag

if (!String.IsNullOrEmpty(text))

{

TagBuilder div = new TagBuilder("div");

div.Attributes.Add("id", id);

div.InnerHtml = text + sb.ToString;

sb = new StringBuilder(

div.ToString(TagRenderMode.Normal));

}

return sb.ToString;

}

private static string GetValue(HtmlHelper html, string id)

{

object o = null;

if (html.ViewData != null)

o = html.ViewData.Eval(id);

if (o == null)

o = html.ViewContext.RequestContext.HttpContext.Request.Params[id];

return (o == null) ? String.Empty : o.ToString;

}

}

Использование серверных элементов управления WebForms

В главе 2, в разд. "Использование элементов управления WebForms в MVC-приложениях” уже была продемонстрирована возможность применения серверных элементов управления в представлениях MVC. Как уже было сказано ранее, использование серверных элементов управления может быть оправдано, если не требуется интерактивное взаимодействие с соответствующим элементом, и он используется только для генерации разметки.

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

Сделать это можно просто, учитывая, что класс Webcontrol, которому наследуют классы конкретных элементов управления, содержит метод Render, генерирующий разметку. Как раз метод Render применяет инфраструктура WebForms для всех элементов управления на страницах. Пример использования элемента управления WebForms приведен в листинге 5.14.

Листинг 5.14. Пример использования класса Button во вспомогательном методе

public static class WebFormsHelper {

public static string WebFormsButton(this HtmlHelper html)

{

Button control = new Button { Text = "Web Forms Button" };

StringBuilder sb = new StringBuilder;

HtmlTextWriter htmlWriter = new HtmlTextWriter(

new StringWriter(sb));

control.RenderControl(htmlWriter);

return sb.ToString;

Поделиться:
Популярные книги

Архимаг. Пробуждение. Трилогия

Рудазов Александр
56. В одном томе
Фантастика:
научная фантастика
9.32
рейтинг книги
Архимаг. Пробуждение. Трилогия

Алексей Михайлович

Сахаров Андрей Николаевич
4. Романовы. Династия в романах
Проза:
историческая проза
5.80
рейтинг книги
Алексей Михайлович

Антипсихология

Ивакин Алексей Геннадьевич
Научно-образовательная:
психология
6.00
рейтинг книги
Антипсихология

Война Калибана

Кори Джеймс С. А.
2. Expanse
Фантастика:
научная фантастика
космическая фантастика
7.93
рейтинг книги
Война Калибана

Романы. Повести. Рассказы. В 2 томах. Том 2

Верн Жюль Габриэль
Фантастика:
научная фантастика
5.00
рейтинг книги
Романы. Повести. Рассказы. В 2 томах. Том 2

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Дикари Ойкумены.Трилогия

Олди Генри Лайон
Дикари Ойкумены
Фантастика:
космическая фантастика
7.00
рейтинг книги
Дикари Ойкумены.Трилогия

Переплет 13

Уолш Хлоя
1. Парни из школы Томмен
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Переплет 13

"Фантастика 2025-10". Книги 1-31

Вальтер Макс
Фантастика 2025. Компиляция
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Фантастика 2025-10. Книги 1-31

Газлайтер. Том 23

Володин Григорий Григорьевич
23. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.40
рейтинг книги
Газлайтер. Том 23

Шерлок Холмс. Большой сборник

Дойл Артур Конан
Детективы:
классические детективы
8.34
рейтинг книги
Шерлок Холмс. Большой сборник

Пламенев. Книга IX

Карелин Сергей Витальевич
9. Пламенев
Фантастика:
аниме
уся
сказочная фантастика
фэнтези
фантастика: прочее
5.00
рейтинг книги
Пламенев. Книга IX

Поэтика Ф. М. Достоевского: опыт интерпретации

Тяпугина Наталия Ю.
Научно-образовательная:
языкознание
7.00
рейтинг книги
Поэтика Ф. М. Достоевского: опыт интерпретации

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль