Como smnbss comenta en la respuesta de Darin Dimitrov, Prompt
existe exactamente para este propósito, por lo que no es necesario crear un atributo personalizado . De la documentación:
Obtiene o establece un valor que se usará para establecer la marca de agua para las solicitudes en la interfaz de usuario.
Para usarlo, simplemente decore la propiedad de su modelo de vista así:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Luego, este texto se coloca convenientemente en ModelMetadata.Watermark
. Fuera de la caja, la plantilla predeterminada en MVC 3 ignora elWatermark
propiedad, pero hacer que funcione es realmente simple. Todo lo que necesita hacer es ajustar la plantilla de cadena predeterminada para decirle a MVC cómo renderizarla. Simplemente edite String.cshtml, como lo hace Darin, excepto que en lugar de obtener la marca de agua ModelMetadata.AdditionalValues
, la obtiene directamente de ModelMetadata.Watermark
:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
Y eso es todo.
Como puede ver, la clave para que todo funcione es la placeholder = ViewData.ModelMetadata.Watermark
bit.
Si también desea habilitar la marca de agua para cuadros de texto de varias líneas (áreas de texto), haga lo mismo para MultilineText.cshtml:
~ / Vistas / Shared / EditorTemplates / MultilineText.cshtml:
@Html.TextArea("", ViewData.TemplateInfo.FormattedModelValue.ToString(), 0, 0, new { @class = "text-box multi-line", placeholder = ViewData.ModelMetadata.Watermark })