当前位置: 首页 > 编程语言 > C#

如何在输出前修改整个ASP.NET页面内容?分享

时间:2023-04-10 14:50:54 C#

如何在输出前修改整个ASP.NET页面内容?我有一个包含大量用户控件的页面。我希望能够在代码中替换的内容中直接使用“宏”或“占位符”。这应该无关紧要,但我使用Ektron作为我的CMS。在将整个呈现的页面内容发送给客户端之前,是否有任何页面事件可以挂钩以对整个呈现的页面内容进行字符串替换?更新这是我目前用来完成此操作的代码:protectedoverridevoidRender(HtmlTextWriterwriter){stringcontent=string.Empty;using(varstringWriter=newStringWriter())using(varhtmlWriter=newHtmlTextWriter(stringWriter)){//将当前页面内容呈现给我们的临时编写器base.Render(htmlWriter);htmlWriter.Close();//获取内容content=stringWriter.ToString();}//替换我们的占位符字符串newContent=content.Replace("$placeholder1$","placeholder1data").Replace("$placeholder2$","placeholder2data");//将新的html写入页面writer.Write(newContent);您是否尝试过重写渲染方法?protectedoverridevoidRender(HtmlTextWriterwriter){StringBuilderhtmlString=newStringBuilder();//这将保存字符串StringWriterstringWriter=newStringWriter(htmlString);HtmlTextWritertmpWriter=newHtmlTextWriter(stringWriter);Page.Render(tmpWriter);.冲洗();作家。写(DoReplaceLogic(htmlString.ToString());;我知道这个答案没有帮助,因为你已经解决了问题并继续前进这是为将来会遇到类似问题的人准备的;)你可以使用两种方法。这类似于接受的答案。但我建议重写BasePage中的render方法并从中派生所有模板。使用HttpModule或Global.asax并将Filter附加到Response对象。对我来说它更美观,因为“过滤器”属性应该可以帮助您过滤输出,这就是您想要的!顺便问一下,到目前为止,Ektron的情况如何?他们肯定让我发疯!你看过生命周期中的PreRender事件吗?在此事件发生之前:?Page对象为每个控件和页面调用EnsureChildControls。?设置每个数据绑定控件的DataSourceID属性调用其DataBind方法。?页面上的每个控件都会发生PreRender事件。使用此事件对页面内容或其控件进行最终更改。我相信这是您可以执行此操作的最后一个地方。下一个事件是SaveStateComplete,根据文档,它具有以下行为:在此事件发生之前,为页面和所有控件保存ViewState。此时对页面或控件的任何更改都将被忽略。使用此事件执行需要保存视图状态而不对控件进行任何更改的任务。想到的简单答案是为您的“占位符”使用asp:Literal控件。您可以在页面加载期间设置其内容,也可以挂钩PreRender事件并进行设置。听起来您可能希望在页面中包含HTML文字,然后您可以将其替换为Page_Load事件中的相应内容。这将要求您编写HTML代码而不是一些简单的文本,但听起来您可能会在其中注入自己的javascript代码等,这将非常有用。以上就是C#学习教程:如何在输出前修改整个ASP.NET页面内容?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: