Como comentários smnbss na resposta de Darin Dimitrov, Prompt
existe exatamente para esse propósito, portanto, não há necessidade de criar um atributo personalizado . Da documentação:
Obtém ou define um valor que será usado para definir a marca d'água para prompts na IU.
Para usá-lo, basta decorar a propriedade do seu modelo de visualização assim:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Este texto é então convenientemente colocado em ModelMetadata.Watermark
. Pronto para usar, o modelo padrão em MVC 3 ignora a Watermark
propriedade, mas fazê-la funcionar é realmente simples. Tudo que você precisa fazer é ajustar o modelo de string padrão para dizer ao MVC como renderizá-lo. Basta editar String.cshtml, como Darin faz, exceto que, em vez de obter a marca d'água de ModelMetadata.AdditionalValues
, você a obtém diretamente deModelMetadata.Watermark
:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
E é isso.
Como você pode ver, a chave para fazer tudo funcionar é o placeholder = ViewData.ModelMetadata.Watermark
bit.
Se você também deseja habilitar a marca d'água para caixas de texto com várias linhas (áreas de texto), faça o mesmo para 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 })