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 })