我正在創建一個自定義的網頁基類(不要與Web表單或MVC混淆),它繼承自System.Web.WebPages.WebPage
。我想要做的是在網頁呈現時運行一些代碼。在Web表單中,我會重寫Render方法來執行此操作;然而,我所看到的所有可覆蓋的方法都是RenderPage,它在當前呈現的頁面內呈現不同的頁面。Razor Web頁面渲染
是否有一種在渲染過程中運行的方法,或者說InitializePage方法的作用是什麼?
謝謝。
我正在創建一個自定義的網頁基類(不要與Web表單或MVC混淆),它繼承自System.Web.WebPages.WebPage
。我想要做的是在網頁呈現時運行一些代碼。在Web表單中,我會重寫Render方法來執行此操作;然而,我所看到的所有可覆蓋的方法都是RenderPage,它在當前呈現的頁面內呈現不同的頁面。Razor Web頁面渲染
是否有一種在渲染過程中運行的方法,或者說InitializePage方法的作用是什麼?
謝謝。
剃刀引擎並不真正「渲染」每一個說。它基本上是一個代碼生成器,可將您的Razor頁面轉換爲文字字符串(HTML)和代碼塊(表達式/代碼)的可執行代碼。它在執行生成的Execute()方法中執行此操作。
因此,當您創建自定義模板時,您可能可以重寫Execute()方法並執行一些預處理或後處理,但不能真正影響生成的代碼中的任何內容。
另一方面,WebForms中的Render()更多地是基於組件的接口,因爲它可以截取任何控件的渲染,而每個控件都有一個負責生成其自己的輸出的Render()方法。在剃刀中,這沒有什麼意義,因爲沒有控件(缺少部分)。
IAC,我建議看一下ASP.NET Temporary Files文件夾中的Razor頁面並檢查源代碼。這會給你一個很好的想法,看看生成的代碼是什麼樣的,以及你可以在自定義模板中做什麼來攔截輸出生成。
根據你需要做什麼,你可以創建一個基礎控制器類,並在'OnActionExecuted'或'OnActionExecuting'中執行你的邏輯。 – wsanville
不是MVC,Razor網頁,網頁版。 –
當頁面呈現時你想做什麼?順便說一句,我是Web Pages和Razor的PM。 –