我已经为每种输入类型实现了一个编辑器模板,该模板将来自模型的“提示”显示批注填充到CSS“占位符”中。
在第一个实例中,我只是在ViewData上添加了“占位符” = ViewData.ModelMetaData.Watermark,并将ViewData传递到TextBox()HtmlAttributes参数中,如在此及其周围的几篇文章中所建议的那样。(尤其要感谢Darin Dimitrov。)
但是,这样做的效果是向每个输入控件中添加了“ returnurl”,“ title”和其他几个ViewData属性。不太令人满意。
我看了一下这篇文章,当我想使用这个想法并创建一个字符串数组来表示不想包含在输入标记和循环中的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)
(顺便说一句,此代码将被重构以使其保持DRY状态)
如果框架实现了“占位符”,或者此时有一种简单的方法来获取HTML属性并将“占位符”添加到那些属性,而不必执行此循环以排除非-HTML-Attribute-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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句