在标签助手中进行上下文化
Contextualizing in tag helper
上下文化标签助手是什么意思?
((IViewContextAware) _html).Contextualize(ViewContext);
我想了解以上代码的作用?
如果我使用上面的代码会怎样?如果我不这样做又怎样。
Contextualize()
sets ViewContext
属性 IHtmlHelper
where 方法被调用。严格来说,您没有将标签助手上下文化,只是 HtmlHelper。
ViewContext
封装了有关当前正在执行的视图以及当前正在执行的操作的所有信息(因为 ViewContext
源自 ActionContext
)。大多数 HtmlHelper 方法都依赖于设置的 ViewContext:例如生成操作链接的方法,因为它包含路由数据或在呈现表单时保持状态。
MVC 将 automatically 在 HTML 帮助程序(事实上,在所有 IViewContextAware
实现)上调用 Contextualize
以执行常规 Razor 视图。然而,HtmlHelper 并不是标签助手的默认概念。当您通过标签助手的构造函数注入它时,它将创建一个新实例,该实例不具有任何视图信息 "contextualized" 。因此你必须手动调用它。
调用需要设置ViewContext
的方法会抛出异常
tl;dr:在您的标签助手中注入 IHtmlHelper
时始终调用 Contextualize
,否则它将无法正常运行。
上下文化标签助手是什么意思?
((IViewContextAware) _html).Contextualize(ViewContext);
我想了解以上代码的作用?
如果我使用上面的代码会怎样?如果我不这样做又怎样。
Contextualize()
sets ViewContext
属性 IHtmlHelper
where 方法被调用。严格来说,您没有将标签助手上下文化,只是 HtmlHelper。
ViewContext
封装了有关当前正在执行的视图以及当前正在执行的操作的所有信息(因为 ViewContext
源自 ActionContext
)。大多数 HtmlHelper 方法都依赖于设置的 ViewContext:例如生成操作链接的方法,因为它包含路由数据或在呈现表单时保持状态。
MVC 将 automatically 在 HTML 帮助程序(事实上,在所有 IViewContextAware
实现)上调用 Contextualize
以执行常规 Razor 视图。然而,HtmlHelper 并不是标签助手的默认概念。当您通过标签助手的构造函数注入它时,它将创建一个新实例,该实例不具有任何视图信息 "contextualized" 。因此你必须手动调用它。
调用需要设置ViewContext
的方法会抛出异常
tl;dr:在您的标签助手中注入 IHtmlHelper
时始终调用 Contextualize
,否则它将无法正常运行。