В мире Web Forms можно легко многократно некоторую
функциональность создав на ее основе элемент управления, за эту
функциональность отвечающий. В MVC Framework эту функциональность
несут методы расширения класса Html (называемые
хэлперами). Разумеется, это лишь условность и на уровне
представлений в MVC можно использовать свой собственный статический
класс или экземпляр класса, передаваемый представлению через
ViewData. Однако подобные условности упрощают жизнь будущим
поколениям разработчиков, которые, возможно, будут поддерживать или
повторно использовать ваш код. Поэтому использование стандартного
подхода через расширение класса Html - хорошая идея.
По своей сущности хэлперы - обычные методы-расширения (extension
methods, C# 3.0), принимающие произвольные набор параметров и
возвращающие строковые значения. Например, создадим хэлпер,
отображающий разметку для составного элемента управления на
странице, позволяющего выбрать дату.
using System.Web.Mvc;
public static class DataPickerHelper
{
public static string DatePicker(this HtmlHelper html, string
id, string text)
{
}
}
Такой метод может быть использован в коде представления через
синтаксиc <%= Html.DatePicker("id","name") %>.
Самое интересное, разумеется, это код самого хелпера. Давайте
посмотрим на то, как можно подойти к созданию такого простого
элемента как набор выпадающих списков для выбора даты.
Конкатенация строк
Самый очевидный способ - сгенерировать разметку конкатенацией
строк.
using System.Web.Mvc;
using System.Text;
using System;
using System.Globalization;
public static class DataPickerHelper
{
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)
{
StringBuilder sb = new StringBuilder();
if (!String.IsNullOrEmpty(text))
{
sb.Append("<div id=\"");
sb.Append(id);
sb.Append("\">");
sb.Append(text);
}
/* Day */
sb.Append("<select id=\"day_");
sb.Append(id);
sb.Append("\">");
sb.Append("<option><...