Перезапись класса в `Html.EditorFor` - PullRequest
13 голосов
/ 02 ноября 2010

по умолчанию с

<%: Html.EditorFor(m => m.ConfirmationHeadline) %>

вывод:

 <input type="text" value="" 
        name="ConfirmationHeadline" id="ConfirmationHeadline" 
        class="text-box single-line">

Как видите, вход уже добавляет атрибут class.Ну, это не должно быть проблемой, просто используйте

<%: Html.EditorFor(m => m.ConfirmationHeadline, new { @class="span-11 last"}) %>

и должно работать ... err ... Нет!

это выдаст точно такой жеcode!

, отлично работает с Html.TextAreaFor()

Как я могу удалить класс text-box single-line из когда-либо появившегося, чтобы мои собственные классы могли быть добавлены?любой шаблон T4, который я должен отредактировать?

Спасибо за помощь.

Ответы [ 6 ]

11 голосов
/ 02 ноября 2010

Нет способа настроить значение атрибута испускаемого класса при использовании встроенных шаблонов редактора с помощью метода EditorFor. Он жестко кодирует значение класса (более подробная информация доступна здесь: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html)

У вас есть два варианта:

  1. Напишите свой собственный шаблон, который поддерживает дополнительные функции. Посмотрите здесь для получения более подробной информации: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

  2. Обработка результатов метода EditorFor:

 <%: new HtmlString(Html.EditorFor(m=>m.ConfirmationHeadline).ToString()
        .Replace("class=\"text-box single-line\"", 
                 "class=\"text-box single-line span-11 last\"")) %>
5 голосов
/ 23 мая 2014

В MCV 5.1 вы можете воспользоваться htmlAttributes. Работает как шарм ...

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } })
2 голосов
/ 01 декабря 2010

asp.net mvc создает файл site.css в папке содержимого. Там вы можете видеть, что класс текстового поля по умолчанию имеет ширину 30 мкм. Сбросить на что-нибудь более разумное, как 15em. Класс из одной строки, похоже, нигде не определен.

1 голос
/ 23 января 2013

Вы можете использовать TextBoxFor вместо

0 голосов
/ 05 июня 2014

попробуйте этот код

@Html.Raw(
    Html.EditorFor(m => m.DataInicial).ToString()
    .Replace(
        "\"text-box single-line\"",
        "\"form-control text-box single-line\""))
0 голосов
/ 22 февраля 2013

У меня была такая же проблема, и мне не понравилось ни одно из приведенных выше решений. Я также нашел похожий пост здесь , но эти решения мне тоже не понравились. После некоторой обработки я нашел что-то, что мне понравилось, что позволило мне продолжать использовать шаблоны редактора (это то, что вы должны попытаться использовать в своих интересах, когда сможете). Я разместил решение здесь

...