我对 sharepoint 和 ajax 功能有奇怪的问题。我们在 webpart 中放置了一个 UpdatePanel。当发生部分回发时,页面标题会丢失。
我们发现临时的部分解决方案是将标题元素写入一行,并且在其中不使用任何空格或控件......甚至不是文字控件。
但是我们需要一些方法来为所有页面提供 sommon 标题,所以标题看起来像这样:我的默认标题 - 当前页面标题
任何想法如何解决这个问题?
我对 sharepoint 和 ajax 功能有奇怪的问题。我们在 webpart 中放置了一个 UpdatePanel。当发生部分回发时,页面标题会丢失。
我们发现临时的部分解决方案是将标题元素写入一行,并且在其中不使用任何空格或控件......甚至不是文字控件。
但是我们需要一些方法来为所有页面提供 sommon 标题,所以标题看起来像这样:我的默认标题 - 当前页面标题
任何想法如何解决这个问题?
我想我会分享我对这个讨厌问题的解决方案。我最终做的是扔掉我放在下面的这个方便的小脚本。您可以将其放在自定义页面布局或自定义母版页中。它的工作原理是连接一个 AJAX 事件处理程序以在 AJAX 更改标题之前获取标题,然后使用上面的 Darpy 代码重新应用它。这允许始终显示正确的页面标题。
<script type="text/javascript">
// This script is to fix the issue where AJAX causes SharePoint
// publishing pages to sometimes make the page title something
// whacky.
var app = Sys.Application;
var origTitle = "";
app.add_init(SPCustomAppnInit);
function SPCustomAppnInit(sender) {
origTitle = document.title; // grab the original title.
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!prm.get_isInAsyncPostBack())
{
prm.add_pageLoaded(SPCustomPageLoaded); // wire up loaded handler.
}
}
function SPCustomPageLoaded(sender, args) {
document.title = origTitle; // put the original title back on the document.
}
<script>
我没有对新闻组帖子的引用,但正如 drax 所提到的,这是发布页面的一个已知问题。我过去使用的解决方法是对页面上的标题进行硬编码——丢失的元数据标题是错误的一部分。
当无法进行硬编码时,我使用 javascript 来更改页面标题: document.title = "title fixup here";
据说微软计划在下一个 sharepoint 版本中解决这个问题。
我意识到这已经得到了回答,但我要投入我的 0.02 美元。问题似乎是由于两个条件而表现出来的:(1) 使用 AJAX 异步回发和 (2) 在页面的 <head> 中具有多行 <title> 元素。
检查您的母版页。如果它有类似的东西:
<title>
<sharepointwebcontrols:listitemproperty property="Title" ...>
</title>
...然后将其全部更改为一行,如下所示:
<title><sharepointwebcontrols:listitemproperty property="Title" ...></title>
问题解决了。不需要javascript。
这看起来像是纯共享点的问题..而且看起来只是基于发布页面布局的网站受到影响。
我在 firebug 中调试了响应,由于某种原因,它返回了页面标题的设置,因此来自服务器的响应不仅包含更新面板信息,还包含空页面标题。
我调试了我们的 Web 部件,但它们都没有使用页面标题。我建议不要使用发布或不使用标题内的任何控件。
我们目前正在我工作的公司处理这个问题,所以当我们弄清楚一些事情时,我会上传你的发现。
在我的 webpart 用户控件的开头添加以下 @ 修复了问题
<script type="text/javascript">
// This script is to fix the issue where AJAX causes SharePoint
// publishing pages to sometimes make the page title something
// whacky.
var app = Sys.Application;
var origTitle = "";
app.add_init(SPCustomAppnInit);
function SPCustomAppnInit(sender) {
origTitle = document.title; // grab the original title.
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!prm.get_isInAsyncPostBack())
{
prm.add_pageLoaded(SPCustomPageLoaded); // wire up loaded handler.
}
}
function SPCustomPageLoaded(sender, args) {
document.title = origTitle; // put the original title back on the document.
}
</script>
非常感谢:D