2010-05-17 1 views
2

У меня есть приложение MVC 2, которое использует формы. Обязательные поля в форме устанавливаются с использованием атрибутов, которые обновляют model metadata. Поля формы создаются с использованием метода MVC HtmlHelper: Html.EditorFor.ASP MVC 2: Пользовательское отображение элемента требуемой формы на основе ModelMetaData

Это хорошо работает в отношении проверки, но кажется, что по умолчанию обязательные поля не отображаются пользователю (например, путем добавления * к элементу управления).

Если я хотел бы предоставить некоторые пользовательские способы отображения этого факта для пользователя (позволяет мне импортировать цвет фона для элемента управления редактированием, например), где это лучшее место для этого? Мне нужно создать пользовательский html-помощник для замены EditorFor? Я попытался, но оказалось трудно получить доступ к метаданным для правильного свойства. У меня уже есть пользовательский ModelMetaDataProvider, поэтому нет проблем с его добавлением, если это правильное место.

ответ

2

Вместо пользовательского помощника вы, вероятно, хотите создать собственный шаблон. Ваш пользовательский шаблон будет имитировать стандартный шаблон, за исключением того, что у вас есть маркер для обязательных полей. См. Статью blog article Brad Wilson о шаблонах в MVC2 для получения дополнительной информации о том, как это сделать, но основная идея заключается в создании ViewUserControl в папках Shared/EditorTemplates (и Shared/DisplayTemplates), которые строго типизированы для вашей модели. Затем вы можете использовать EditorFor и DisplayFor и указать имя шаблона для использования, хотя я думаю, что он также подберет шаблон, если он строго типизирован для вашей модели.

+0

Спасибо за быстрый ответ. Я уже использую шаблоны отображения/редактора и рассматриваю это как вариант, так как вы можете получить доступ к данным из модели. Думаю, если бы я это сделал, мне нужно было бы предоставить шаблоны для каждого типа данных? – Nigel

+0

Я попробовал, и он работал для регулярных текстовых полей, просто создав новый шаблон для строки. Другие входы и выходы не должны быть слишком сложными. Если никто другой не предложит лучшую альтернативу, я отмечу этот ответ и отправлю примерный код. – Nigel

+0

Если вы используете стандартные помощники из шаблона, все работает так, как ожидалось, поэтому вам не нужны шаблоны для стандартных типов данных, а именно для ваших моделей. Вы также можете сделать что-то с javascript, чтобы добавить что-то после обязательных полей, используя 'window.mvcClientValidationMetadata', чтобы найти поля с ValidationType' required' и добавить флаг. – tvanfosson

Смежные вопросы