Czy można skonfigurować wbudowanego pomocnika znacznika asp-for
, aby wstawić element zastępczy z atrybutu [Display(Prompt = "This is the placeholder")]
w modelu widoku.Element zastępczy wejściowy z metadanych ViewModel w programie ASP.NET Core 1.0
[Display(Name="Name", Prompt = "This is the placeholder")]
public string Name { get; set; }
W MVC 5 Jestem w stanie to osiągnąć przez dodanie dodatkowych logiki w moim edytorze szablonów oraz sprawdzenie właściwości ViewData.ModelMetadata.Watermark
. Na przykład:
@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" })
Ale teraz w ASP.NET Core 1.0 chciałbym rozpocząć korzystanie z nowego podejścia do obsługi tagów. Domyślnie pomocnik asp-for
kompilacji ignoruje wartość atrybutu .
Posiadanie własnej niestandardowej implementacji atrybutu asp-for
, np. my-asp-for
to opcja i najprawdopodobniej skończę ją mieć ze względu na łatwość konserwacji i ponowne wykorzystanie dodatkowej logiki. Ale wtedy właściwość Watermark
nie jest już obecna w ModelMetadata
, tj. Nie ma czegoś takiego jak For.Metadata.Watermark
.
Jedyne miejsce, w którym widzę wartość Prompt
w pomocniku asp-for
, jest nieco ukryte.
Mam więc dwa pytania. Czy jest to mądrzejszy sposób? Czy niewłaściwym zwyczajem jest przyjmowanie symboli zastępczych z metadanych widoku, tzn. Czy powinienem to wyraźnie określić w pliku brzytwy?
Działa również dla mnie. Dzięki! – Plebsori
Wydaje się nie działać dla '