Как отмечает 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
бит.
Если вы также хотите включить водяные знаки для многострочных текстовых полей (textareas), вы сделаете то же самое для 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 })