2011-08-15 11 views
9

Zasadniczo chcę pomocnika Html (coś jak @Html.MyEditor(m => m.Property)) w celu wytworzenia w ten sposób:Jak korzystać z Html.EditorFor() (i innych) wewnątrz niestandardowego pomocnika 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> 

Jedynym problemem jest to, że nie może wydawać się, aby uzyskać dostęp Html.EditorFor() lub którykolwiek z pozostałych metod rozszerzenie w bok mojego własnego pomocnika. Przykład próba:

@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> 
} 

Próbowałem też składnię metodę rozszerzenia:

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(); 
} 

w obu próbach przedstawiono powyżej, LabelFor, EditorFor i ValidationMessageFor rzucać błędy kompilacji ("Nie można odnaleźć").

Ktoś wie, jak to zrobić? Z góry dziękuję!

+3

Może nie dostałem triku za pytaniem, ale w drugim przypadku (ponieważ jest to czysty C#, prawda?) IMHO powinno działać, jeśli masz przestrzeń nazw korzystającą z przestrzeni nazw System.Web.Mvc.Html. Metody rozszerzeń są zdefiniowane w tej przestrzeni nazw w różnych klasach rozszerzania statycznego (np. Edytor Rozszerzenia). –

+1

@Tz_ To było to! Miałem 'System.Web.Mvc', ale nie' System.Web.Mvc.Html'. Dziwne, że VS2010 nie powiedział mi, że jest to przestrzeń nazw, której potrzebowałem - zwykle podnosi to i daje mi automatyczną korektę do użycia oświadczenia, więc pomyślałem, że było coś jeszcze nie tak. Jeśli chcesz dodać odpowiedź zamiast komentarza, przyznam ci kredyt za poprawną odpowiedź. – jrizzo

Odpowiedz

7

Powinien działać, jeśli w przestrzeni nazw System.Web.Mvc.Html jest używana przestrzeń nazw. Metody rozszerzeń są zdefiniowane w tej przestrzeni nazw w różnych klasach rozszerzania statycznego (np. Edytor Rozszerzenia).

Powiązane problemy