2011-08-15 5 views
9

基本的に、私はこの生成するHTMLヘルパー(@Html.MyEditor(m => m.Property)のようなもの)欲しい:カスタムHtmlヘルパー内でHtml.EditorFor()(など)を使用するにはどうすればよいですか?

<div class="editor-label"> 
    @html.LabelFor(m => m.Property) 
</div> 
<div class="editor-field"> 
    @html.EditorFor(m => m.Property) 
    @html.ValidationMessageFor(m => m.Property) 
</div> 

が唯一の問題は、私はHtml.EditorFor()やサイド自分のヘルパー内の他の拡張メソッドのいずれかにアクセスするように見えることができないということです。例試行:

@helper Edit(this System.Web.Mvc.HtmlHelper<Spartacus.ViewModels.NewTaskItemModel> html) 
{ 
    <div class="editor-label"> 
     @html.LabelFor(m => m.Property) 
    </div> 
    <div class="editor-field"> 
     @html.EditorFor(m => m.Property) 
     @html.ValidationMessageFor(m => m.Property) 
    </div> 
} 

私はまた、拡張メソッドの構文を試みた:上記の両方の試みで

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression) 
{ 
    var sb = new StringBuilder(); 
    sb.AppendLine("<div class=\"editor-label\">"); 
    sb.AppendLine(html.LabelFor(expression)); 
    sb.AppendLine("</div>"); 
    sb.AppendLine("<div class=\"editor-field\">"); 
    sb.AppendLine(html.EditorFor(expression)); 
    sb.AppendLine(html.ValidationMessageFor(expression)); 
    sb.AppendLine("</div>"); 
    return sb.ToString(); 
} 

、LabelFor、EditorFor、及びValidationMessageForは( "見つかりませんでした")コンパイルエラーをスローします。

誰かがこれを行う方法を知っていますか?前もって感謝します!

+3

おそらく私は質問の背後にあるトリックを取得しませんでしたが、2番目のケースでは(これは純粋なC#ですよね?)IMHO System.Web.Mvc.Html名前空間を使用する名前空間があれば動作するはずです。拡張メソッドは、さまざまな静的拡張クラス(EditorExtensionsなど)のこの名前空間で定義されています。 –

+1

@Tz_ それでした!私は 'System.Web.Mvc'を持っていましたが、' System.Web.Mvc.Html'は持っていませんでした。 VS2010が私に必要な名前空間であるとは言わなかったのは間違いです。通常はそれを選択してusingステートメントの自動修正を行いますので、何か間違っていると思いました。 コメントの代わりに回答を追加したい場合は、正解のクレジットを返します。 – jrizzo

答えて

7

System.Web.Mvc.Html名前空間に名前空間を使用している場合は、これが動作するはずです。拡張メソッドは、さまざまな静的拡張クラス(EditorExtensionsなど)のこの名前空間で定義されています。

関連する問題