Перезапись класса в `Html.EditorFor`

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

<%: 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"}) %>

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

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

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

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

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

6 ответов

Решение

При использовании встроенных шаблонов редактора через 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\"")) %>

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

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } })

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

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

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

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

@Html.Raw(
    Html.EditorFor(m => m.DataInicial).ToString()
    .Replace(
        "\"text-box single-line\"",
        "\"form-control text-box single-line\""))
Другие вопросы по тегам