Предварительные сборки Asp.Net MVC 2.0 предоставляют такие помощники, как
Html.EditorFor(c => c.propertyname)
Если имя свойства - строка, приведенный выше код отображает тексбокс.
Что, если я хочу передать свойства MaxLength и Size в текстовое поле или собственное свойство класса css?
Нужно ли мне создавать один шаблон для каждой комбинации размера и длины в моем приложении? Если это так, это не делает шаблоны по умолчанию пригодными для использования.
c#
asp.net-mvc
asp.net-mvc-2
чандмк
источник
источник
Я решил это, создав EditorTemplate с именем String.ascx в моей папке / Views / Shared / EditorTemplates:
На мой взгляд, я использую
Для меня работает как шарм!
источник
Ни один из ответов в этом или любом другом потоке по установке атрибутов HTML для @ Html.EditorFor мне не очень помог. Однако я нашел отличный ответ на
Стилизация помощника @ Html.EditorFor
Я использовал тот же подход, и он отлично работал без написания большого количества дополнительного кода. Обратите внимание, что атрибут id вывода html Html.EditorFor установлен. Код просмотра
Свойство модели с аннотацией данных и форматированием даты как «дд МММ гггг».
Работает как шарм, без написания лишнего кода. В этом ответе используется ASP.NET MVC 3 Razor C #.
источник
Возможно, вы захотите посмотреть сообщение в блоге Кирана Чанда , он использует настраиваемые метаданные в модели представления, такие как:
Это сочетается с настраиваемыми шаблонами, которые используют метаданные. На мой взгляд, это чистый и простой подход, но я бы хотел, чтобы этот типичный вариант использования был встроен в mvc.
источник
EditorFor
, передав их как:new { htmlAttributes: { @class = "yourclass" } }
Я удивлен, что никто не упомянул о передаче его в "additionalViewData" и чтении с другой стороны.
Просмотр (с разрывами строк для наглядности):
Шаблон редактора:
источник
Проблема в том, что ваш шаблон может содержать несколько элементов HTML, поэтому MVC не будет знать, к какому из них применить ваш размер / класс. Вам придется определить это самостоятельно.
Сделайте свой шаблон производным от вашего собственного класса TextBoxViewModel:
}
В шаблоне вы можете сделать это:
На ваш взгляд, вы делаете:
Первая форма будет отображать шаблон по умолчанию для строки. Вторая форма отобразит настраиваемый шаблон.
Альтернативный синтаксис использует свободный интерфейс:
}
Обратите внимание, что вместо того, чтобы делать это в представлении, вы также можете сделать это в контроллере или, что лучше, в ViewModel:
Также обратите внимание, что вы можете сделать базовый класс TemplateViewModel - общую основу для всех ваших шаблонов представления - который будет содержать базовую поддержку атрибутов / etc.
Но в целом я думаю, что MVC v2 требует лучшего решения. Это все еще бета - иди, спроси ;-)
источник
Я думаю, что использование CSS - лучший способ. Хотел бы я делать больше с кодированием .NET, как в XAML, но в браузере CSS - король.
Site.css
.cshtml
Джо
источник
EditorFor
шаблона. Я использую MVC4, и это отлично сработало.Как и в MVC 5, если вы хотите добавить какие-либо атрибуты, вы можете просто сделать
Информация, найденная в этом блоге
источник
Вы можете определить атрибуты для своих свойств.
Это известно как
System.ComponentModel.DataAnnotations
. Если вы не можете найти то,ValidationAttribute
что вам нужно, вы всегда можете определить собственные атрибуты.С уважением, Карлос
источник
Возможно, это не самое удачное решение, но оно простое. Вы можете написать расширение для класса HtmlHelper.EditorFor. В этом расширении вы можете указать параметр options, который будет записывать параметры в ViewData для помощника. Вот код:
Во-первых, метод расширения:
Затем объект параметров:
И напоследок строчка из шаблона String.ascx:
Честно говоря, я думаю, что это просто и ясно для бедняги, которая должна поддерживать ваш код в будущем. И его легко расширить для другой информации, которую вы хотели бы передать в свои шаблоны. Пока что он хорошо работает для меня в проекте, где я пытаюсь обернуть как можно больше в набор шаблонов, чтобы помочь стандартизировать окружающий html, а-ля http://bradwilson.typepad.com/blog/2009/ 10 / aspnet-mvc-2-templates-part-5-master-page-templates.html .
источник
Я написал запись в блоге, чтобы ответить на свой вопрос
Добавление поддержки атрибутов html для шаблонов - бета-версия ASP.Net MVC 2.0
источник
Я не знаю, почему это не работает для Html.EditorFor, но я попробовал TextBoxFor, и у меня это сработало.
... а также работы по валидации.
источник
@class = "className"
В своей практике я обнаружил, что лучше всего использовать EditorTemplates только с одним HtmlHelper в нем - TextBox, который есть в большинстве случаев. Если мне нужен шаблон для более сложной структуры html, я напишу отдельный HtmlHelper.
Учитывая, что мы можем вставить весь объект ViewData вместо htmlAttributes TextBox. Кроме того, мы можем написать код настройки для некоторых свойств ViewData, если они нуждаются в особой обработке:
Ниже приведены примеры синтаксиса в представлении и выводимого HTML:
источник
Потому что вопрос к редактору для not TextBoxFor, предложение WEFX не работает.
Для изменения отдельных полей ввода вы можете обработать вывод метода EditorFor:
Также можно изменить ВСЕ ваши EditorFors, поскольку оказывается, что MVC устанавливает класс текстовых полей EditorFor с .text-box , поэтому вы можете просто переопределить этот стиль в своей таблице стилей или на странице.
Кроме того, вы можете установить стиль для
источник
У меня также была проблема с установкой ширины TextBox в MVC3, при этом установка атрибута Clsss работала для элемента управления TextArea, но не для элемента управления TextBoxFor или элемента EditorFor:
Я пробовал следовать, и это сработало для меня:
@ Html.TextBoxFor (model => model.Title, new {Class = "textBox", style = "width: 90%;"})
также в этом случае проверки работают отлично.
источник
Один из способов обойти это - иметь делегатов в модели представления для обработки специальной визуализации, подобной этой. Я сделал это для класса подкачки, я выставляю общедоступное свойство модели
Func<int, string> RenderUrl
чтобы справиться с этим.Итак, определите, как будет записан специальный бит:
Выведите представление для
Paging
класса:... а для фактического
Paging
вида:Это могло показаться слишком сложным делом, но я использую эти пейджеры повсюду и не могу видеть один и тот же шаблонный код для их рендеринга.
источник
ОБНОВЛЕНИЕ: хм, очевидно, это не сработает, потому что модель передается по значению, поэтому атрибуты не сохраняются; но я оставляю этот ответ как идею.
Другим решением, я думаю, было бы добавление ваших собственных помощников TextBox / etc, которые будут проверять ваши собственные атрибуты в модели.
Это проще, но не так удобно / гибко.
источник
Это самый чистый и элегантный / простой способ найти здесь решение.
Блестящий пост в блоге и никаких лишних излишеств в написании собственных расширений / вспомогательных методов, как безумный профессор.
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
источник
Мне очень понравился ответ @tjeerdans, который использует EditorTemplate с именем String.ascx в папке / Views / Shared / EditorTemplates. Кажется, это наиболее прямой ответ на этот вопрос. Однако мне нужен был шаблон с синтаксисом Razor. Кроме того, похоже, что MVC3 использует шаблон String по умолчанию (см. Вопрос StackOverflow « Шаблон отображения mvc для строк используется для целых чисел »), поэтому вам нужно установить модель как объект, а не строку. Кажется, мой шаблон пока работает:
источник
Я решил !!
Для Razor синтаксис:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" })
это регулирует ширину текстовой области до ширины, определенной в параметре стиля.Для ASPx синтаксис:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
это поможет
источник