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ę!
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). –
@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