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