Comme smnbss commentaires dans Darin Dimitrov réponse, Prompt
existe exactement pour ce but, il n'ya donc pas besoin de créer un attribut personnalisé. À partir de la documentation:
Obtient ou définit une valeur qui sera utilisée
pour définir la limite pour les invites
l'INTERFACE utilisateur.
Pour l'utiliser il suffit de décorer votre modèle de vue de la propriété de la sorte:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Ce texte est idéalement placé en ModelMetadata.Watermark
. Hors de la boîte, le modèle par défaut dans MVC 3 ignore l' Watermark
de la propriété, mais le faire fonctionner est vraiment simple. Tout ce que vous devez faire est de modifier la valeur par défaut de la chaîne de modèle, de dire MVC comment le rendre. Juste modifier la Chaîne.cshtml, comme Darin, sauf qu'au lieu de recevoir le filigrane d' ModelMetadata.AdditionalValues
, vous obtenez directement à partir de ModelMetadata.Watermark
:
~/Views/Shared/EditorTemplates/Chaîne.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
ou
// Add the placeholder data to the existing ViewData so other ViewData info is not lost.
@{
ViewData["placeholder"] = ViewData.ModelMetadata.Watermark;
}@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData)
Et c'est tout.
Comme vous pouvez le voir, la clé pour faire tout ce travail est l' placeholder = ViewData.ModelMetadata.Watermark
bits.
Si vous aussi vous souhaitez activer la fonction de filigrane pour le multi-ligne de zones de texte (textareas), vous faites la même chose 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 })
ou
// Add the placeholder data to the existing ViewData so other ViewData info is not lost.
@{
ViewData["placeholder"] = ViewData.ModelMetadata.Watermark;
} @Html.TextArea("", ViewData.TemplateInfo.FormattedModelValue.ToString(), 0, 0, ViewData)