2009-02-10 77 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"]或任何用于填充标签与内容无法启动或换行结束。