MVC6 ViewComponents RenderInvoke() 与 Invoke()
MVC6 ViewComponents RenderInvoke() vs Invoke()
我不明白 IViewComponentHelper.RenderInvoke 的目的,因为它 returns 无效。
Invoke 方法将在我的视图中呈现一个 html 字符串,这是我一直用来呈现 MVC6 ViewComponent 的内容。
Invoke
和 RenderInvoke
之间的区别在于它们的 return 值以及它们的结果如何到达最终输出。
使用 @Component.Invoke(...)
,您可以执行视图组件并将值呈现到页面。或者你可以这样做:
@{
HtmlString myHtmlString = Component.Invoke(...);
}
这很有用,因为您可以在将 Invoke
调用的输出写入结果流之前对其进行检查。在 @Component.Invoke(...)
的情况下,输出被转换为 HtmlString
,然后让页面将其写入结果流。
现在 RenderInvoke
。由于其 return 值 (void
),Component.RenderInvoke(...)
无法在 Razor 页面中在其前面写入 @
。这个方法的目的是:我不要任何中间值(HtmlString
)直接写到结果流(ViewContext.Writer
)。因此,您将始终以类似于此的格式使用 RenderInvoke
:
@{
Component.RenderInvoke(...);
}
总结一下。 Invoke
用于在您想编写 @Component.Invoke(...)
时方便使用,或者用于通过将值保存到变量来检查值。 RenderInvoke
做的工作最少,不创建 HtmlString
并直接写入最终输出;当您想在 @functions {...}
块中渲染 ViewComponents
时也很方便:
@functions
{
public void SomeUtility()
{
...
Component.RenderInvoke(...);
...
}
}
希望这对您有所帮助!
我不明白 IViewComponentHelper.RenderInvoke 的目的,因为它 returns 无效。
Invoke 方法将在我的视图中呈现一个 html 字符串,这是我一直用来呈现 MVC6 ViewComponent 的内容。
Invoke
和 RenderInvoke
之间的区别在于它们的 return 值以及它们的结果如何到达最终输出。
使用 @Component.Invoke(...)
,您可以执行视图组件并将值呈现到页面。或者你可以这样做:
@{
HtmlString myHtmlString = Component.Invoke(...);
}
这很有用,因为您可以在将 Invoke
调用的输出写入结果流之前对其进行检查。在 @Component.Invoke(...)
的情况下,输出被转换为 HtmlString
,然后让页面将其写入结果流。
现在 RenderInvoke
。由于其 return 值 (void
),Component.RenderInvoke(...)
无法在 Razor 页面中在其前面写入 @
。这个方法的目的是:我不要任何中间值(HtmlString
)直接写到结果流(ViewContext.Writer
)。因此,您将始终以类似于此的格式使用 RenderInvoke
:
@{
Component.RenderInvoke(...);
}
总结一下。 Invoke
用于在您想编写 @Component.Invoke(...)
时方便使用,或者用于通过将值保存到变量来检查值。 RenderInvoke
做的工作最少,不创建 HtmlString
并直接写入最终输出;当您想在 @functions {...}
块中渲染 ViewComponents
时也很方便:
@functions
{
public void SomeUtility()
{
...
Component.RenderInvoke(...);
...
}
}
希望这对您有所帮助!