上下文
我有一个Asp.net网络应用程序,一些页面继承自基类“BasePage”.
这个BasePage类继承自System.Web.ui.Page,我已经覆盖了Render方法,以便我可以在将HTML流发送到客户端浏览器之前拦截.
- protected override void Render(HtmlTextWriter writer){
- MemoryStream memoryStream = new MemoryStream();
- try
- {
- using (StreamWriter streamWriter = new StreamWriter(memoryStream))
- {
- var textWriter = new HtmlTextWriter(streamWriter);
- base.Render(textWriter);
- textWriter.Flush();
- memoryStream.Position = 0;
- using (StreamReader reader = new StreamReader(memoryStream))
- {
- string finalHtml = reader.ReadToEnd();
- // Processing filters
- finalHtml = FilterManager.ProcessFilters(finalHtml);
- // Writing output to client
- writer.Write(finalHtml);
- reader.Close();
- }
- }
- }
- catch(ObjectDisposedException)
- {
- }
- finally
- {
- memoryStream.Dispose();
- }
- }
到现在为止还挺好.有用.我没有使用response filtering feature的原因是我知道it wouldn’t be compatible with Post-cache substitution
是.我也想使用outputcache替换.为了测试的目的,我在aspx页面中添加了一个小的asp .net控件:
- <asp:Substitution runat="server" id="UnCachedArea" methodname="GetFreshDateTime" />
- protected static string GetFreshDateTime(HttpContext context)
- {
- return DateTime.Now.ToString();
- }
…和…它的工作原理!我的过滤器只能在第一页加载中工作,并且在页面上进行的每次刷新都会发生替换.
问题
替换字符串插入到错误的位置,恰好在开放标签之后,而我的可疑控件位于页面底部的页脚中.
任何线索?