我已經爲我的每個輸入類型實現了一個編輯器模板,該模板用我的「提示」顯示註釋填充了css「佔位符」楷模。ASP.Net MVC-5編輯器模板,ViewData和佔位符(水印)導致無關標記
在第一個實例中,我只是將「placeholder」= ViewData.ModelMetaData.Watermark添加到ViewData,並將ViewData傳遞給TextBox()HtmlAttributes參數,如同在這裏和周圍的幾個帖子中所建議的。 (特別感謝Darin Dimitrov。)
但是,這樣做會爲每個輸入控件添加「returnurl」,「title」和其他幾個ViewData屬性。不是很滿意。
我看了一下this post,當時我想我會採取這個想法並創建一個字符串數組,代表ViewData屬性的Keys的字符串數組,我不想將其包含在輸入 - 標記並通過ViewData循環,並只添加那些不在該列表中的屬性。
這是我對字符串編輯器模板(共享\ 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)
(BTW這個代碼將被重新分解,以保持其乾燥)
會如果在框架中實現了「佔位符」,或者在這一點上有一種簡單的方法來獲取HTML屬性,並且僅向這些屬性添加「佔位符」,而不必執行此循環來排除非HTML -Attribute-的ViewData。
我錯過了什麼嗎?有沒有更好的方法來實現這個解決方案所做的?
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { placeholder = ViewData.ModelMetadata.Watermark })
而且你的佔位符文本可以設置爲:
肯定的,但失去了所有其它的HTML屬性集在剃刀標記中,不是嗎? – lukkea