我已经为我的每个输入类型实现了一个编辑器模板,它用来自我的模型的“提示”显示注释填充css“占位符”。
在第一个例子中,我只是将"placeholder"=ViewData.ModelMetaData.Watermark添加到ViewData中,并将ViewData传递给TextBox() HtmlAttributes参数,这在这里和周围的几个帖子中都有这样的建议。(特别感谢达林·季米特洛夫。)
但是,这样做的效果是在每个输入控件中添加“返回”、“标题”和其他几个ViewData属性。不太满意。
我看了一下这个职位,正要试一试,我想我会采纳这个想法,创建一个字符串数组来表示我不希望包含在输入标记和循环中的ViewData属性的键,并且只添加那些不在列表中的属性。
这是字符串编辑器模板(Shared\EditorTemplates\String.cshtml)的代码:
@{
IDictionary<string, object> htmlAtts = new Dictionary<string, object>();
string[] varData = {"ReturnUrl", "Title"}; //there are more values in my actual code
foreach (KeyValuePair<string, object> entry in ViewData)
{
if (!varData.Contains(entry.Key)) {
htmlAtts.Add(entry.Key, entry.Value);
}
}
htmlAtts["placeholder"] = ViewData.ModelMetadata.Watermark;
}
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAtts)(顺便说一句,这段代码将被重新考虑以保持干燥)
如果“占位符”是由框架实现的,或者有一种简单的方法在此时抓取HTML属性并将“占位符”添加到这些属性中,而不必执行这个循环来排除非HTML属性视图数据,那就太好了。
我是不是遗漏了什么?是否有更好的方法来实现这个解决方案所做的?
发布于 2015-09-25 13:38:54
正如我在问题中提到的,这是解决问题(Shared\EditorTemplates\String.cshtml)的字符串编辑器模板的代码:
@{
IDictionary<string, object> htmlAtts = new Dictionary<string, object>();
string[] varData = {"ReturnUrl", "Title"}; //there are more values in my actual code
foreach (KeyValuePair<string, object> entry in ViewData)
{
if (!varData.Contains(entry.Key)) {
htmlAtts.Add(entry.Key, entry.Value);
}
}
htmlAtts["placeholder"] = ViewData.ModelMetadata.Watermark;
}
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAtts)发布于 2014-09-16 18:45:36
如果您想要完成的只是从ViewData.ModelMetadata.Watermark中添加占位符,那么您的字符串模板可以如下所示:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { placeholder = ViewData.ModelMetadata.Watermark })您的占位符文本可以在视图模型的DataAnnotations中设置。
https://stackoverflow.com/questions/20634891
复制相似问题