2012-03-10 31 views
2

我這樣做是在EditorTemplate查看:如何在課堂中調用佔位符水印?

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, 
    new { placeholder = ViewData.ModelMetadata.Watermark }) 

我現在想要做的事,在裏面我是用TagBuilder和MergeAttribute類文件。例如,我使用代碼來顯示「required」的圖像,並嘗試修改它以使用佔位符執行相同的操作。但我不能做ViewData。所以這是行不通的:

public static MvcHtmlString PlaceholderFor<T, TValue> 
    (this HtmlHelper<T> html, Expression<Func<T, TValue>> expression) 
    { 
     var placeholder = new ModelMetadata([CAN'T FIGURE OUT IN HERE]); 
     placeholder.MergeAttribute([ALSO CAN'T FIGURE OUT IN HERE]); 
     return MvcHtmlString.Create(placeholder.ToString()); 
    } 

我甚至不知道,如果以上是合適的,所以我可以做這樣的事情:

input.MergeAttribute += html.PlaceholderFor(expression); 

還是那也是不正確的做法。

對於上下文我建立一個「輸入」使用:

input.InnerHtml += html.EditorFor(expression); 

任何一個可以提供一個代碼示例,將在這方面的工作?對不起,如果我沒有正確解釋它。

+0

你想設置的HTML5佔位符輸入? – bloudraak 2012-03-10 20:33:12

+0

是的。能夠用'@ Html.Textbox'做到這一點。現在嘗試在課堂上做到這一點。 – REMESQ 2012-03-11 02:28:45

回答

0

你的問題不是很清楚你想要達到的目標。但是,如果你想通過內部的其他自定義幫助的文本框助手獲取生成的內容,你可以簡單地調用這個文本框幫手:

public static IHtmlString MyHelperFor<T, TValue>(
    this HtmlHelper<T> html, 
    Expression<Func<T, TValue>> expression, 
    object htmlAttributes 
) 
{ 
    var div = new TagBuilder("div"); 

    var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
    var attributes = new RouteValueDictionary(htmlAttributes); 
    attributes["placeholder"] = metadata.Watermark; 

    div.InnerHtml = html.TextBoxFor(expression, attributes).ToHtmlString(); 

    return new HtmlString(div.ToString()); 
} 

然後:

@Html.MyHelperFor(x => x.Test, new { @class = "foo" }) 
+0

我在幫助者裏面做這個。我試圖做'input.InnnerHtml + = EditorFor(表達式,屬性).ToHtmlString();'但它沒有顯示出來。我使用'EditorFor'是因爲我渲染的不僅僅是文本框。 – REMESQ 2012-03-11 15:36:03

+0

@REMESQ,我不明白你想要做什麼,什麼沒有出現。另外標準的'EditorFor'幫手不會把'attributes'作爲第二個參數。它將表達式作爲第一個參數,並且可選的第二個參數表示模板的名稱。 – 2012-03-11 18:17:39

+0

我正在試圖將一個佔位符放到'EditorFor'幫助器中,該幫助器具有用於呈現常規文本框以及單選按鈕列表和複選框列表的代碼。幫助者選擇表單元素的類型,因此是通用的。可能只是我不能這樣做。感謝您試圖幫助。 – REMESQ 2012-03-12 13:14:34