我不明白IViewComponentHelper.RenderInvoke的目的,因爲它返回void。MVC6 ViewComponents RenderInvoke()vs Invoke()
Invoke方法將在我的視圖中呈現一個html字符串,這是我總是用來呈現一個MVC6 ViewComponent的東西。
我不明白IViewComponentHelper.RenderInvoke的目的,因爲它返回void。MVC6 ViewComponents RenderInvoke()vs Invoke()
Invoke方法將在我的視圖中呈現一個html字符串,這是我總是用來呈現一個MVC6 ViewComponent的東西。
Invoke
和RenderInvoke
之間的差異是它們的返回值以及它們的結果如何達到最終輸出。
使用@Component.Invoke(...)
您可以執行視圖組件並將值呈現給頁面。或者你也可以這樣做:
@{
HtmlString myHtmlString = Component.Invoke(...);
}
,因爲你可以檢查Invoke
調用之前,它被寫入結果流的輸出。這可能是有用的。在@Component.Invoke(...)
的情況下,輸出將被轉換爲HtmlString
,然後讓頁面將其寫入結果流。
現在爲RenderInvoke
。由於其返回值(void
),Component.RenderInvoke(...)
無法在剃刀頁面的前面寫入@
。這種方法的目的是:我不希望任何中間值(HtmlString
)直接寫入結果流(ViewContext.Writer
)。因此,你總是會在類似這樣的格式使用RenderInvoke
:
@{
Component.RenderInvoke(...);
}
概括一切。當你想寫@Component.Invoke(...)
時,爲方便起見,使用Invoke
或者通過將值保存到一個變量來檢查該值。 RenderInvoke
工作量最少,不會創建HtmlString
並直接寫入最終輸出;這也方便當你想渲染ViewComponents
在@functions {...}
塊:
@functions
{
public void SomeUtility()
{
...
Component.RenderInvoke(...);
...
}
}
希望這有助於!