2009-02-10 66 views
3

什麼是從ASP.NET WebForms中「override void Render」等效的ASP.NET MVC? 在將輸出發送給客戶端之前,您有機會做最後一分鐘的處理嗎?相當於從ASP.NET WebForms中「override void Render」的ASP.NET MVC

例如,我不會在生產代碼中使用此代碼,但會說明在放置到WebForms應用程序的母版頁中時,整個網站的標記清除<title><head>

protected override void Render(HtmlTextWriter writer) 
    { 
     System.IO.StringWriter sw = new System.IO.StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     base.Render(htw); 
     htw.Close(); 
     string h = sw.ToString(); 
     string fhtml = h.Replace("<title>\r\n\t", "\n<title>") 
          .Replace("\r\n</title>", "</title>") 
          .Replace("</head>","\n</head>"); 
     // write the new html to the page 
     writer.Write(fhtml); 
    } 

在ASP.NET MVC中使用最終文本渲染進行遊戲的最佳方法是什麼?

UPDATE:
所以看着安德魯野兔提到它看起來你可以在視圖引擎做鏈接(圖表)。你可以將事物插入或改變默認視圖引擎的工作方式嗎?還是必須替換整個事物?

+0

任何人都想刺探問題的更新部分? – BuddyJoe 2009-02-10 20:57:32

+0

這看起來很像您的問題:http://stackoverflow.com/questions/460145/what-is-the-page-lifecycle-of-an-asp-net-mvc-page-compared-to-asp-net -webforms – 2009-02-10 15:47:51

回答

4

這不是MVC的工作方式。

所有'onprerender'代碼都在視圖中完成。當你將數據傳遞給控制器​​的視圖時,你應該完成顯示整個頁面所需的所有處理。

唯一的例外是模型在視圖探測時仍然可以做一些處理。

這可能包括設定泛音所需的變量自首或關閉等

+0

我並不質疑這是最佳做法,但有時需要它。我正在面對IE9的ghost單元問題,我需要清除我的tr/td/th元素之間的所有空格來解決這個問題。有兩種選擇。要麼我編輯我的所有觀點,並將我的所有內容放在一行中,這將使其無法維護。另一種選擇是我使用RegExes處理最終的HTML輸出。這似乎是在現有業務應用程序上執行此操作的更好方法。 – Flater 2012-09-12 12:31:46

0

據我所看到的,你想在你的Render() - 方法做的唯一的事情就是重新安排一些的<head>部分中的標籤。在MVC中,這已經正確地爲您完成了,除非您在Masterpage中使用某種家居方式創建<head>部分。

我建議正好對準標記要直接他們在html標記您的Master的方式,並確保ViewData["title"]或任何用於填充標籤與內容無法啓動或換行結束。