2013-05-01 3 views
1

Наш проект использует много методов расширения пользовательских 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

ответ

1

Вам нужно создать класс, который наследуется WebViewPage и добавляет ваше пользовательское свойство, а затем изменить все ваших взглядов, чтобы наследовать этот класс.

Вы можете изменить базовый класс по умолчанию в Web.config.

+0

Благодаря это работало для меня. Я нашел подробное руководство по выполнению именно этого и пользовательского HtmlHelper: [Изменение базового типа вида бритвы] (http://haacked.com/archive/2011/02/21/changing-base-type-of-a- бритва view.aspx). – Roury

0

У меня есть скелет, как вы можете поступить следующим образом

public MtWebViewPage<TModel> : WebViewPage 
{ 
    public HtmlHelper<TModel> MyHtml {get;set;} 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^