SharePoint 2010>&燃气轮机;编辑输出HTML>&燃气轮机;页面或母版页呈现覆盖问题
嗯。这是一个大的。我会尽力解释我的问题,但如果你需要更多信息,请告诉我 我想更改SharePoint 2010生成的HTML。 我将使用HTML Agility Pack],它将在其他对象中获取一个HTML字符串,并更改源代码 有两种方法可以更改SP中的完整源SharePoint 2010>&燃气轮机;编辑输出HTML>&燃气轮机;页面或母版页呈现覆盖问题,html,sharepoint-2010,overriding,Html,Sharepoint 2010,Overriding,嗯。这是一个大的。我会尽力解释我的问题,但如果你需要更多信息,请告诉我 我想更改SharePoint 2010生成的HTML。 我将使用HTML Agility Pack],它将在其他对象中获取一个HTML字符串,并更改源代码 有两种方法可以更改SP中的完整源 使用控件适配器或扩展控件,我可以访问页面、母版页甚至ContentPlaceHolder呈现方法,获取HTML,修改它,然后编写它 使用带有筛选器的HTTP模块并更改输出流 不幸的是,这两种方法都存在问题 第二,过滤器工作正常,但必须禁用
HtmlDocument hd = new HtmlDocument(); //Agility HTML Object.
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
//Render Object into HtmlTextWriter
base.Render(htw);
//String to hold the HTML from the StringBuilder of the HtmlTextWriter
string html = sb.ToString();
//Mess with the String here using the Agility HTML Pack
//Write the HTML to the writer
writer.Write(html);
//Done!
这段代码效果很好,但SharePoint 2010在页面/母版页的呈现覆盖后将数据附加到编写器/或更改控件
当我调试、浏览并查看html字符串时,它如下所示
"<html .... ....</html>"
DOMAIN\user<script type="text/javascript">
//<![CDATA[
var _spUserId=1;
//]]>
</script>
<html...
....</html>
“该问题是由页面中的某些内容在呈现期间干扰outputcache造成的,更具体地说,是PostCacheSubstitutionTextHelper类的行为造成的。您对上面呈现的调用可能会触发此问题
welcome.asxc控件的行为大致如下(伪序列图):
页面呈现>Welcome.ascx呈现>PersonalActions呈现>PostCacheSubstitutionText.呈现>PostCacheSubstitutionTextHelper.RenderAndRegisterSubstitutionCallbackHandler
(的新实例)PostCacheSubstitutionText.Render(在委托中调用,现在写入HtmlTextWriter)>PostCacheSubstitutionTextHelper.RenderRegisterSubstitutionCallbackHandler HttpContext.Response.WriteSubstitution(StuffFromNewInstanceOffPostCacheSubstitutionText)
sharepoint怪胎秀到此为止,接下来是解决方法:-)
尝试将此添加到配置单元中的welcome.ascx:
// in bottom of directives in /CONTROLTEMPLATES/Welcome.ascx
<%@ OutputCache Duration="1" VaryByParam="none" %>
//在/CONTROLTEMPLATES/Welcome.ascx中指令的底部
请注意,由于用户控件不允许使用0,因此持续时间设置为1。这在理论上可能导致失败,但在我们的场景中,它起到了作用。我遇到了同样的问题,我可以通过从母版页中删除这一行来解决此问题
<wssuc:Welcome id="IdWelcome" runat="server">
</wssuc:Welcome>
Awesome!谢谢Mads。不过有一个简单的问题。我如何以编程方式设置它?我无法在14配置单元中编辑文件。我试图从母版页代码中访问该控件,将其转换为欢迎控件,并修改CachePolicy上的属性以匹配标记,但我收到一个错误,说缓存没有为此配置单元设置控件?有什么提示可以让我针对任何控件并将持续时间设置为1就太好了!你好,Tommmy,你找到解决这个问题的好方法了吗?
// in bottom of directives in /CONTROLTEMPLATES/Welcome.ascx
<%@ OutputCache Duration="1" VaryByParam="none" %>
<wssuc:Welcome id="IdWelcome" runat="server">
</wssuc:Welcome>