Comme le commentaire smnbss dans la réponse de Darin Dimitrov, Promptexiste exactement dans ce but, il n'est donc pas nécessaire de créer un attribut personnalisé . De la documentation:
  Obtient ou définit une valeur qui sera utilisée pour définir le filigrane des invites dans l'interface utilisateur.
Pour l'utiliser, décorez simplement la propriété de votre modèle de vue comme ceci:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Ce texte est ensuite commodément placé dans ModelMetadata.Watermark. Hors de la boîte, le modèle par défaut dans MVC 3 ignore la Watermarkpropriété, mais le faire fonctionner est vraiment simple. Tout ce que vous avez à faire est de peaufiner le modèle de chaîne par défaut pour indiquer à MVC comment le rendre. Modifiez simplement String.cshtml, comme le fait Darin, sauf que plutôt que d'obtenir le filigrane ModelMetadata.AdditionalValues, vous l'obtenez directement à partir de ModelMetadata.Watermark:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
Et c'est tout.
Comme vous pouvez le voir, la clé pour que tout fonctionne est le placeholder = ViewData.ModelMetadata.Watermarkbit.
Si vous souhaitez également activer le filigrane pour les zones de texte multilignes (zones de texte), procédez de la même manière pour 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 })