Contextualize()
устанавливает свойство ViewContext
для IHtmlHelper
, где вызывается метод. Строго говоря, вы не контекстуализируете помощника по тегам, просто HtmlHelper.
ViewContext
инкапсулирует всю информацию о текущем выполняемом представлении, а также о текущем выполняемом действии (поскольку ViewContext
происходит от ActionContext
). Большинство методов HtmlHelper зависит от устанавливаемого ViewContext: например, методов, генерирующих ссылки действий, так как они содержат данные маршрута или для сохранения состояния при визуализации формы.
MVC автоматически вызовет Contextualize
для HTML-помощника (фактически, для всех реализаций IViewContextAware
) при выполнении обычного представления Razor. Однако HtmlHelper не является концепцией по умолчанию для помощников тегов. Когда вы внедряете его через конструктор помощника по тегам, он создает новый экземпляр, который не «контекстуализируется» какой-либо информацией о представлении. Поэтому вы должны вызвать его вручную.
Исключение будет выдано при вызове метода, для которого требуется установить ViewContext
.
tl; dr : всегда вызывайте Contextualize
при введении IHtmlHelper
в ваш помощник тегов, иначе он не будет работать должным образом.