Поскольку комментарии 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 })