【发布时间】:2011-07-07 20:12:02
【问题描述】:
上下文
我有一个 Asp .Net Web 应用程序,其中一些页面继承自基类“BasePage”。 这个 BasePage 类继承自 System.Web.ui.Page 并且我重写了 Render 方法,以便可以在将 HTML 流发送到客户端浏览器之前对其进行拦截。
这是我的 Render 方法的代码:
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();
}
...并且...它有效!我的过滤器只在第一个页面加载时起作用,并且在我在页面上进行的每次刷新时都会发生替换。
问题
替换字符串插入错误的位置,就在开始正文标记之后,而我的替换控件位于页面的最底部,在页脚中。
有什么线索吗?
【问题讨论】:
-
我们这里也有同样的问题...我开始了赏金。我希望一个好的灵魂能帮助我们。
-
如果你去掉自定义渲染它工作正常吗?
标签: asp.net outputcache substitution