Шрифт:
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. Как уже было сказано ранее, использование серверных элементов управления может быть оправдано, если не требуется интерактивное взаимодействие с соответствующим элементом, и он используется только для генерации разметки.