Da smnbss-Kommentare in Darin Dimitrovs Antwort Prompt
genau zu diesem Zweck vorhanden sind, muss kein benutzerdefiniertes Attribut erstellt werden . Aus der Dokumentation:
Ruft einen Wert ab oder legt einen Wert fest, mit dem das Wasserzeichen für Eingabeaufforderungen in der Benutzeroberfläche festgelegt wird.
Um es zu verwenden, dekorieren Sie einfach die Eigenschaft Ihres Ansichtsmodells wie folgt:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Dieser Text wird dann bequem in platziert ModelMetadata.Watermark
. Standardmäßig ignoriert die Standardvorlage in MVC 3 die Watermark
Eigenschaft, aber es ist wirklich einfach, sie zum Laufen zu bringen. Sie müssen lediglich die Standardzeichenfolgenvorlage anpassen, um MVC mitzuteilen, wie sie gerendert werden soll. Bearbeiten Sie einfach String.cshtml, wie es Darin tut, außer dass Sie das Wasserzeichen nicht ModelMetadata.AdditionalValues
erhalten, sondern direkt von ModelMetadata.Watermark
:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
Und das ist alles.
Wie Sie sehen können, ist der Schlüssel, damit alles funktioniert, das placeholder = ViewData.ModelMetadata.Watermark
Bit.
Wenn Sie das Wasserzeichen auch für mehrzeilige Textfelder (Textbereiche) aktivieren möchten, tun Sie dasselbe für 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 })