Як smnbss коментує відповідь Даріна Димитрова, Promptіснує саме для цієї мети, тому немає потреби створювати власний атрибут . З документації:
Отримує або встановлює значення, яке буде використано для встановлення водяного знаку для підказок в інтерфейсі користувача.
Щоб скористатися ним, просто прикрасьте властивість вашої моделі подання так:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Потім цей текст зручно розмістити в ModelMetadata.Watermark. Звичайно шаблон за замовчуванням у MVC 3 ігнорує Watermarkвластивість, але змусити його працювати дуже просто. Все, що вам потрібно зробити, це налаштувати шаблон рядка за замовчуванням, щоб сказати MVC, як його візуалізувати. Просто відредагуйте String.cshtml, як це робить Дарін, за винятком того, що замість отримання водяного знаку ModelMetadata.AdditionalValuesви отримуєте його прямо з ModelMetadata.Watermark:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
І це все.
Як бачите, ключовим фактором, щоб все працювало, є placeholder = ViewData.ModelMetadata.Watermarkбіт.
Якщо ви також хочете увімкнути водяний знак для багаторядкових текстових полів (текстових областей), ви зробите те саме для MultilineText.cshtml:
~ / Views / Shared / EditorTemplates / MultilineText.cshtml:
@Html.TextArea("", ViewData.TemplateInfo.FormattedModelValue.ToString(), 0, 0, new { @class = "text-box multi-line", placeholder = ViewData.ModelMetadata.Watermark })