Наш проект использует много методов расширения пользовательских HtmlHelper ссылаться в представлениях, как:Как создать пользовательский класс, похожий на HtmlHelper, и инициализировать с помощью ViewContext?
@Html.MyHelperMethod()
Однако, я хотел бы, чтобы держать их отделено от системы единиц и быть в состоянии сделать что-то вроде либо из следующее:
@Html.MyApp.MyHelperMethod()
@MyAppHtml.MyHelperMethod()
следуя Razor HtmlHelpers with sub-sections? я был в состоянии осуществить что-то вроде
@Html.MyApp().MyHelperMethod()
Thi s просто не выглядит так хорошо с MyApp() как функция haha. Поэтому я решил сделать свой собственный класс. Я хочу, чтобы иметь возможность получить доступ к ViewContext так же, как HtmlHelper делает:
public class MyHtmlHelper
{
public ViewContext ViewContext { get; private set; }
public MyHtmlHelper(ViewContext viewContext)
{
this.ViewContext = viewContext;
}
public MvcHtmlString MyHelperMethod()
{
//... Do something that accesses this.ViewContext
}
}
Однако, я понятия не имею, что наследование и переопределение (ViewPage?), Где поставить свойство MyHtmlHelper или где инициализировать. Другая альтернатива идея, которую я могу придумать, это создать объект BaseModel все модели наследовать и добавить свойство MyHtmlHelper в нем для того, чтобы сделать
@Model.MyAppHtml.MyHelperMethod()
Это потребует каждый метод контроллера передать контекст объекта модели (чтобы ссылаться на ViewContext), но это кажется утомительным компромиссом. Любые другие идеи о том, как «подразделение» вспомогательных методов не использует функции?
UPDATE: Благодаря ответам здесь, я нашел подробный пример создания пользовательского класса HtmlHelper вроде этого: Changing Base Type Of A Razor View
Благодаря это работало для меня. Я нашел подробное руководство по выполнению именно этого и пользовательского HtmlHelper: [Изменение базового типа вида бритвы] (http://haacked.com/archive/2011/02/21/changing-base-type-of-a- бритва view.aspx). – Roury