Можно ли настроить встроенный помощник тега asp-for
, чтобы взять заполнитель ввода из атрибута [Display(Prompt = "This is the placeholder")]
в модели представления.
[Display(Name="Name", Prompt = "This is the placeholder")]
public string Name { get; set; }
В MVC 5 я могу добиться этого, добавив дополнительную логику в мои шаблоны редактора и проверив свойство ViewData.ModelMetadata.Watermark
. Например:
@model string
@{
Dictionary<string, object> htmlAttributes = new Dictionary<string, object>();
htmlAttributes.Add("class", "form-control");
if (!string.IsNullOrWhiteSpace(ViewData.ModelMetadata.Watermark))
{
htmlAttributes.Add("placeholder", ViewData.ModelMetadata.Watermark);
}
}
@Html.Label("")
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttributes)
@Html.ValidationMessage("", "", new { @class = "text-danger" })
Но теперь, в ASP.NET Core 1.0, я хотел бы начать использовать новый подход к вспомогательным функциям тегов. По умолчанию сборка в помощнике asp-for
просто игнорирует значение атрибута Prompt
.
Имея свою собственную реализацию атрибута asp-for
, например. my-asp-for
- это вариант, и, скорее всего, я в конечном итоге возьму его для удобства обслуживания и повторного использования дополнительной логики. Но тогда свойства Watermark
больше нет в ModelMetadata
, т.е. нет такого понятия, как For.Metadata.Watermark
.
Единственное место, где я вижу значение Prompt
в помощнике asp-for
, несколько скрыто.
Итак, у меня есть два вопроса. Есть ли более разумный способ сделать это? Является ли плохой практикой брать заполнитель из метаданных модели представления, т. Е. Я должен явно указать его в файле бритвы?