Darin Dimitrovの回答でsmnbssがコメントしてPrompt
いるように、まさにこの目的のために存在するため、カスタム属性を作成する必要はありません。ドキュメントから:
UIでプロンプトの透かしを設定するために使用される値を取得または設定します。
これを使用するには、ビューモデルのプロパティを次のように装飾します。
[Display(Prompt = "numbers only")]
public int Age { get; set; }
このテキストは、便利な場所に配置されModelMetadata.Watermark
ます。箱から出して、MVC 3のデフォルトのテンプレートはWatermark
プロパティを無視しますが、それを機能させるのは本当に簡単です。デフォルトの文字列テンプレートを微調整して、MVCにレンダリング方法を指示するだけです。Darinと同じように、String.cshtmlを編集するだけです。ただし、から透かしを取得するのではなく、からModelMetadata.AdditionalValues
直接取得しますModelMetadata.Watermark
。
〜/ Views / Shared / EditorTemplates / String.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })
そしてそれだけです。
ご覧のとおり、すべてを機能させるための鍵はplaceholder = ViewData.ModelMetadata.Watermark
少しです。
複数行のテキストボックス(textareas)に対して透かしを有効にする場合は、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 })