Come commenta smnbss nella risposta di Darin Dimitrov, Prompt
esiste esattamente per questo scopo, quindi non è necessario creare un attributo personalizzato . Dalla documentazione:
Ottiene o imposta un valore che verrà usato per impostare la filigrana per i prompt nell'interfaccia utente.
Per usarlo, basta decorare la proprietà del modello di visualizzazione in questo modo:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Questo testo viene quindi opportunamente inserito ModelMetadata.Watermark
. Per impostazione predefinita, il modello predefinito in MVC 3 ignora la Watermark
proprietà, ma farlo funzionare è davvero semplice. Tutto quello che devi fare è modificare il modello di stringa predefinito, per dire a MVC come renderlo. Basta modificare String.cshtml, come fa Darin, tranne per il fatto che invece di ottenere la filigrana da ModelMetadata.AdditionalValues
, la ottieni direttamente da ModelMetadata.Watermark
:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
E questo è tutto.
Come puoi vedere, la chiave per far funzionare tutto è il placeholder = ViewData.ModelMetadata.Watermark
bit.
Se desideri abilitare anche la filigrana per le caselle di testo multilinea (aree di testo), fai lo stesso per 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 })