2015-08-18 18 views

回答

3

InvokeRenderInvoke之間的差異是它們的返回值以及它們的結果如何達到最終輸出。

使用@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(...); 
     ... 
    } 
} 

希望這有助於!