2008-11-28 2 views
3

У меня странная проблема с sharepoint и функцией ajax. У нас есть UpdatePanel, размещенный внутри webpart. Когда происходит частичная обратная передача, заголовок страницы отсутствует.Sharepoint, ajax и заголовок

Мы обнаружили, что временное частичное решение состоит в том, чтобы написать элемент заголовка в одну строку, а не использовать какие-либо пробелы или элементы управления внутри него ... даже литеральный контроль.

Но нам нужно каким-то образом, чтобы обеспечить название sommon для всех страниц, так что название будет выглядеть следующим образом: Мой заголовок по умолчанию - Текущая страница название

Любые идеи, как решить эту проблему?

ответ

3

У меня нет ссылки на сообщение в группе новостей, но это известная проблема с публикацией страниц, как упоминалось в драке. Обходной путь, который я использовал в прошлом, - это жесткий код заголовка на странице - потерянный метаданные является частью ошибки.

Когда hardcoding не удалось, я использовал javascript для изменения названия страницы: document.title = "title fixup here";

Предполагается, что Microsoft решит эту проблему в следующей версии sharepoint.

+0

+1: грязное обходное решение, но иногда это должно быть сделано ... – vitule

+0

спасибо за ваш ответ .. мы сможем реализовать некоторые аналогичные исправления javascript, потому что невозможно писать заголовки страниц для нас – drax

0

это похоже на проблему с чистым sharepoint. Также похоже, что затронуты только сайты, основанные на публикации макета страницы.

Я отлаживал ответ в firebug, и по какой-то причине он возвращает настройки для заголовка страницы, поэтому ответ от сервера содержит не только информацию о панели обновления, но и пустой заголовок страницы.

Я отлаживал наши веб-страницы, и ни одна из них не воспроизводится с заголовком страницы. Я бы предложил не использовать публикации или просто не использовать какие-либо элементы управления внутри заголовка.

В настоящее время мы работаем над этой проблемой в компании, в которой я работаю, поэтому я буду загружать результаты, когда мы что-то выясняем.

+0

Вы когда-нибудь выясняли, почему это происходит только при публикации страниц? Это кажется очень странным. – xr280xr

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

Спасибо! Это исправило мою проблему отлично! Я просто хочу, чтобы у меня были привилегии мод, поэтому я мог бы исправить ваш стиль :) – phairoh

+0

форматирование исправлено. – James

0

Добавление следующих @ начале моего веб-части пользовательского элемента управления Исправлена ​​ошибка

<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> 

Проблема решена. Javascript не требуется.

+0

Очень полезно, спасибо! –

+0

+1 - Замечательно простое решение проблемы, которая меня озадачила. – TZHX

+0

Это потрясающе. 2,5 года, но я просто столкнулся с этой проблемой. Благодарю. –

Смежные вопросы