2008-11-28 68 views
3

我有奇怪的问题与SharePoint和AJAX功能。我们有一个放置在webpart中的UpdatePanel。部分回发时,页面标题丢失。Sharepoint,ajax和页面标题

我们发现暂时的部分解决方案是将标题元素写入一行,并且不使用任何空格或控件,它甚至不是文字控件。

但我们需要一些方法来为所有页面提供sommon标题,所以标题是这样的: 我的默认标题 - 当前页面的标题

任何想法如何解决这个问题?

回答

3

我没有对新闻组帖子的引用,但这是发布页面的已知问题,如drax所述。我过去使用的解决方法是在页面上硬编码标题 - 正在丢失的元数据标题是错误的一部分。

当硬编码是不可能的,我已经使用JavaScript来改变页面标题:document.title =“title fixup here”;

微软计划在下一个SharePoint发行版中解决这个问题。

+0

+1:肮脏的解决方法,但有时它必须做... – vitule 2008-12-01 17:18:06

+0

感谢您的答案..我们将propably实施一些类似的JavaScript修复,因为它是不可能为我们硬编码页标题 – drax 2008-12-01 17:59:37

0

这看起来像纯粹的共享点的问题。它看起来像只基于发布页面布局的网站会受到影响。

我在firebug中调试响应,由于某种原因它返回了页面标题的设置,所以来自服务器的响应不仅包含更新面板信息,还包含空白页面标题。

我调试了我们的webparts,没有一个玩页面标题。我建议不要使用发布,或者不要在标题中使用任何控件。

我们目前正在公司工作中处理这个问题,因此当我们找出某些事情时,我会上传您的调查结果。

+0

你有没有想过为什么这只发生页面?这似乎很奇怪。 – xr280xr 2013-03-07 14:54:12

5

我以为我会分享我的解决这个讨厌的问题。我最终做的是扔下这个方便的小脚本放在一起。您可以将其放入自定义页面布局或自定义母版页中。它通过连接一个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> 
+0

谢谢!这完全解决了我的问题!我只希望我有mod特权,所以我可以修复你的造型:) – phairoh 2010-03-19 20:42:12

0

添加以下@我的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

3

我知道这已经被回答,但我要去投入我的$ .02。看起来问题表现为两个条件:(1)使用AJAX异步回发;(2)在页面的<头>中具有多行<标题>元素。

检查您的母版页。如果它有以下几点:

<title> 
<sharepointwebcontrols:listitemproperty property="Title" ...> 
</title> 

...然后将其全部更改为一行,如下所示:

<title><sharepointwebcontrols:listitemproperty property="Title" ...></title> 

问题已解决。没有JavaScript要求。