2011-11-14 224 views
1

我正在創建一個自定義的網頁基類(不要與Web表單或MVC混淆),它繼承自System.Web.WebPages.WebPage。我想要做的是在網頁呈現時運行一​​些代碼。在Web表單中,我會重寫Render方法來執行此操作;然而,我所看到的所有可覆蓋的方法都是RenderPage,它在當前呈現的頁面內呈現不同的頁面。Razor Web頁面渲染

是否有一種在渲染過程中運行的方法,或者說InitializePage方法的作用是什麼?

謝謝。

+0

根據你需要做什麼,你可以創建一個基礎控制器類,並在'OnActionExecuted'或'OnActionExecuting'中執行你的邏輯。 – wsanville

+1

不是MVC,Razor網頁,網頁版。 –

+0

當頁面呈現時你想做什麼?順便說一句,我是Web Pages和Razor的PM。 –

回答

2

剃刀引擎並不真正「渲染」每一個說。它基本上是一個代碼生成器,可將您的Razor頁面轉換爲文字字符串(HTML)和代碼塊(表達式/代碼)的可執行代碼。它在執行生成的Execute()方法中執行此操作。

因此,當您創建自定義模板時,您可能可以重寫Execute()方法並執行一些預處理或後處理,但不能真正影響生成的代碼中的任何內容。

另一方面,WebForms中的Render()更多地是基於組件的接口,因爲它可以截取任何控件的渲染,而每個控件都有一個負責生成其自己的輸出的Render()方法。在剃刀中,這沒有什麼意義,因爲沒有控件(缺少部分)。

IAC,我建議看一下ASP.NET Temporary Files文件夾中的Razor頁面並檢查源代碼。這會給你一個很好的想法,看看生成的代碼是什麼樣的,以及你可以在自定義模板中做什麼來攔截輸出生成。