Почему не все элементы управления формы могут быть отображены через HtmlHelper? - PullRequest
3 голосов
/ 22 апреля 2009

Кто-нибудь знает, почему некоторые элементы управления HTML-формы могут быть отображены с использованием System.Web.Mvc.HtmlHelper (скрытый, флажок, пароль, текстовое поле), а некоторые не могут и должны быть явно написаны в HTML ( файл, отправить)? Каков принцип этого разделения?

Ответы [ 2 ]

4 голосов
/ 22 апреля 2009

Хороший вопрос.

Я бы подумал, что элементы управления вводом (например, input, select) заключены в помощники Html, чтобы они могли поддерживать свое собственное состояние через TempData без необходимости писать много кода для этого. Я бы также подумал, что элементы управления ссылками и формами обернуты, чтобы дать простой и унифицированный способ указать контроллер / действие для этих элементов управления. Большинство других элементов управления не требуют ни готового управления состоянием, ни встроенных URL-адресов контроллера / действия.

Конечно, ничто не мешает вам писать свои собственные обертки для любого элемента управления, который вам нравится - например, вот пара, которую я использую - вот для элемента управления html-меткой:

public static string Label(this HtmlHelper helper, string fieldName, string labelText)
{
    var sb = new StringBuilder();
    sb.Append("<label for=\"");
    sb.Append(fieldName);
    sb.Append("\">");
    sb.Append(labelText);
    sb.Append("</label>");
    return sb.ToString();
}

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

public static string TextField(this HtmlHelper helper, string labelText, string fieldName, string value)
{
    return string.Concat(
        "<div>",
        helper.Label(fieldName, labelText),
        helper.TextBox(fieldName, value),
        "</div>");
}
3 голосов
/ 22 мая 2009

Я нашел ответ Фила Хаака в теме "Html.SubmitButton () отсутствует в Preview4?" относительно проблемы:

Да, мы пытаемся сохранить помощники несколько минималистский. Не только что мы получили отзыв от некоторые люди, которые многие из наших помощников не нужны «Я знаю HTML, почему Мне нужен помощник SubmitButton? ".

Мы поняли, что так как кнопки ввода как правило, не используются для визуализации пользователя ввод, вспомогательный метод имеет маргинальный значение. В конце концов, с VS HTML редактор, вы получаете intellisense, когда вы тип . Это говорит вам какие атрибуты доступны. наш Помощник не делает.

...

То, чего мы хотим избежать, это иметь помощник для каждого элемента HTML. Тот не имеет смысла: Html.Div.

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

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

...