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

Razor 从ASP.NET Core 1.0中的ViewModel元数据输入占位符,razor,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,Razor,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,是否可以为标记帮助器设置内置的asp,以从视图模型中的[Display(Prompt=“This Is placeholder”)]属性获取输入占位符 [Display(Name="Name", Prompt = "This is the placeholder")] public string Name { get; set; } 在MVC5中,我可以通过在编辑器模板中添加额外的逻辑并检查ViewData.ModelMetadata.Watermark属性来实现这一点。例如:

是否可以为标记帮助器设置内置的
asp,以从视图模型中的
[Display(Prompt=“This Is placeholder”)]
属性获取输入占位符

[Display(Name="Name", Prompt = "This is the placeholder")]        
public string Name { get; set; }
在MVC5中,我可以通过在编辑器模板中添加额外的逻辑并检查
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" })
@模型字符串
@{
字典htmlAttributes=新字典();
添加(“类”,“窗体控件”);
如果(!string.IsNullOrWhiteSpace(ViewData.ModelMetadata.Watermark))
{
添加(“占位符”,ViewData.ModelMetadata.Watermark);
}
}
@Html.Label(“”)
@Html.TextBox(“,ViewData.TemplateInfo.FormattedModelValue,htmlAttributes)
@Html.ValidationMessage(“,”,new{@class=“text danger”})
但是现在在ASP.NETCore1.0中,我想开始使用新的标记帮助器方法。默认情况下,内置的
asp for
帮助程序只会忽略
提示符
属性值

拥有我自己的
asp for
属性的自定义实现,例如
my asp for
是一个选项,我很可能最终拥有它是为了可维护性和重用其他逻辑。 但是,
模型元数据
中不再存在
水印
属性,即,.Metadata.Watermark
没有
这样的东西

asp for
帮助程序中,我唯一能看到
提示符
值的地方有些隐藏

所以我有两个问题。 有更聪明的方法吗?
从viewmodel元数据中获取占位符是否是一种不好的做法,即我应该在razor文件中明确指定占位符?

我刚刚做了一个快速测试,如果我理解正确,对于默认VS模板,这似乎是现成的:

型号:

公共类LoginViewModel
{
[必需]
[电邮地址]
[显示(Name=“电子邮件”,提示符=”example@example.org")]
公共字符串电子邮件{get;set;}
[必需]
[数据类型(数据类型.密码)]
公共字符串密码{get;set;}
[显示(Name=“记得我吗?”)]
公共布尔记忆{get;set;}
}
查看代码段:

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

结果:


对我也有用。谢谢通常,最好解释一个解决方案,而不是仅仅发布几行匿名代码。你可以阅读,也可以。是的,你是对的。我认为这个代码是可以理解的。不需要额外的解释。尤其是这部分。=>DisplayNameFor(m=>m.Tags)
Html.TextBoxFor(t => t.Tags, new { placeholder = Html.DisplayNameFor(m => m.Tags) })