2012-03-10 4 views
2

私はEditorTemplateビューで次の操作を行います。クラス内でプレースホルダーウォーターマークを呼び出すにはどうすればよいですか?

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

は、私は今、私はTagBuilderとMergeAttributeを使用していたにクラスファイルに何かをしたいです。たとえば、「必須」の画像を表示するコードを使用し、同じものをプレースホルダで行うように変更しようとしました。しかし、私はViewDataを行うことはできません。だから、これは動作しません。

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

またはそれはまた間違ったアプローチであるかどうか:

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.InnerHtml += html.EditorFor(expression); 

は、いずれかが、この文脈で作業するコードの例を提供することができます:コンテキストについては

私が使用して「入力」を構築していますか?私はそれを正しく説明していない場合は申し訳ありません。

+0

あなたがHTML5のプレースホルダを設定しようとしている。しかし、あなたは、単にこのテキストボックス(TextBox)ヘルパーを呼び出すことができます別のカスタムヘルパー内部のTextBoxヘルパーによって生成されたコンテンツを取得したい場合入力? – bloudraak

+0

はい。 '@ H​​tml.Textbox'でそれを実現できました。今、クラスでやろうとしています。 – REMESQ

答えて

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

+0

@REMESQ、私はあなたが何をしようとしているのか、何が表示されていないのか分かりません。また、標準の 'EditorFor'ヘルパーは第2引数として' attributes'を取っていません。第1引数としての式と、テンプレートの名前を表すオプションの第2引数を取ります。 –

+0

私は、ラジオボタンリストとチェックボックスリストと共に通常のテキストボックスをレンダリングするコードを持つ 'EditorFor'ヘルパーにプレースホルダを取得しようとしていました。ヘルパーはフォーム要素のタイプを選択しているため、汎用です。私はこれをすることができないことだけかもしれない。助けてくれてありがとう。 – REMESQ

関連する問題