从ASP.NET Core 1.0中的ViewModel元数据输入占位符

reg*_*uld 10 razor asp.net-core-mvc asp.net-core asp.net-core-1.0

是否可以设置内置asp-for标记帮助器以从[Display(Prompt = "This is the placeholder")]视图模型中的属性获取输入占位符.

[Display(Name="Name", Prompt = "This is the placeholder")]        
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

在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" })
Run Code Online (Sandbox Code Playgroud)

但是现在在ASP.NET Core 1.0中我想开始使用新的标签帮助方法.默认情况下,构建asp-for助手只是忽略Prompt属性值.

拥有我自己的asp-for属性的自定义实现,例如my-asp-for是一个选项,并且最有可能的是,为了可维护性和重用其他逻辑,我最终会拥有它.但后来该Watermark物业不再存在ModelMetadata,即没有这样的东西For.Metadata.Watermark.

我能看到帮助器中唯一Prompt值的地方asp-for有点隐藏.

在此输入图像描述

所以我有两个问题.有更聪明的方法吗?从viewmodel元数据中取出占位符是不好的做法,即我应该在剃刀文件中明确指定它?

Soc*_*ock 31

我刚刚做了一个快速测试,如果我理解正确的话,对于我来说这似乎是默认的VS模板开箱即用:

模型:

public class LoginViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email", Prompt = "example@example.org")]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

查看代码段:

<div class="form-group">
    <label asp-for="Email" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述