Jak komentuje smnbss w odpowiedzi Darina Dimitrova, Prompt
istnieje dokładnie w tym celu, więc nie ma potrzeby tworzenia niestandardowego atrybutu . Z dokumentacji:
Pobiera lub ustawia wartość, która będzie używana do ustawiania znaku wodnego dla monitów w interfejsie użytkownika.
Aby go użyć, po prostu udekoruj właściwość modelu widoku w następujący sposób:
[Display(Prompt = "numbers only")]
public int Age { get; set; }
Ten tekst jest następnie wygodnie umieszczony w ModelMetadata.Watermark
. Po wyjęciu z pudełka domyślny szablon w MVC 3 ignoruje tę Watermark
właściwość, ale sprawienie, by działało, jest naprawdę proste. Wszystko, co musisz zrobić, to dostosować domyślny szablon ciągu, aby powiedzieć MVC, jak go renderować. Po prostu edytuj String.cshtml, tak jak robi to Darin, z tym wyjątkiem, że zamiast ModelMetadata.AdditionalValues
pobierać znak wodny z , otrzymasz go bezpośrednio z ModelMetadata.Watermark
:
~ / Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
I to wszystko.
Jak widać, kluczem do działania jest plik placeholder = ViewData.ModelMetadata.Watermark
bit.
Jeśli chcesz również włączyć znak wodny dla wielowierszowych pól tekstowych (obszarów tekstowych), zrób to samo dla 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 })