Подтвердить что ты не робот

Логотип сайта SharePoint Redirect привязан к домашней странице корневого семейства сайтов

Я хочу, чтобы ссылка на логотип сайта на главной странице всегда перенаправлялась на домашнюю страницу семейства корневых сайтов. Поведение по умолчанию - перенаправление на домашнюю страницу текущего веб-сайта (spweb).

В SharePoint 2010 я мог бы это сделать, добавив атрибут NavigateUrl в элемент управления SPLinkButton на главной странице со значением ~ sitecollection следующим образом:

<SharePoint:SPLinkButton runat="server" NavigateUrl="~sitecollection/" id="onetidProjectPropertyTitleGraphic">
<SharePoint:SiteLogoImage name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="/_layouts/images/siteIcon.png" runat="server"/>
</SharePoint:SPLinkButton>

Однако в SharePoint 2013 элемент управления ссылкой на сайт был изменен на главной странице на SPSimpleSiteLink. Я попытался установить свойство NavigateUrl для этого элемента управления таким же образом, но он больше не работает.

<div id="siteIcon" class="ms-tableCell ms-verticalAlignTop">
  <SharePoint:AjaxDelta id="DeltaSiteLogo" BlockElement="true" runat="server">
    <SharePoint:SPSimpleSiteLink NavigateUrl="~sitecollection/" CssClass="ms-siteicon-a" runat="server" id="onetidProjectPropertyTitleGraphic" >
      <SharePoint:SiteLogoImage CssClass="ms-siteicon-img" name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="/_layouts/15/images/siteIcon.png?rev=23" runat="server"/>
    </SharePoint:SPSimpleSiteLink>
  </SharePoint:AjaxDelta>
</div>

В качестве обходного решения я теперь удалил элемент управления оболочкой AjaxDelta и изменил SPSimpleSiteLink на старый SPLinkButton с добавленным атрибутом NavigateUrl. Кажется, что это работает.

Есть ли лучшие способы?

4b9b3361

Ответ 1

Что касается MSDN SharePoint: SPSimpleSiteLink - это очень простой элемент управления, который обеспечивает связь с текущим сайтом. Этот элемент управления совместим как хром-контроль на главной странице MDS "

если вы хотите, чтобы ссылка на логотип сайта всегда перенаправлялась на корневой сайт семейства сайтов, используйте SharePoint: SiteLogoImage (как мы использовали с SP 2010)

<SharePoint:AjaxDelta id="DeltaSiteLogo" BlockElement="true" runat="server">
<SharePoint:SPLinkButton runat="server" NavigateUrl="~sitecollection/" id="onetidProjectPropertyTitleGraphic">
                    <SharePoint:SiteLogoImage  name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="images/logo.png" runat="server">
                                </SharePoint:SiteLogoImage>
              </SharePoint:SPLinkButton>

Ответ 2

Как Muawiyah Shannak упомянул, что вам просто нужно заменить SharePoint: SPSimpleSiteLink на элемент SharePoint: SPLinkButton.

Если вы используете инструмент SharePoint Design-Manager Snippet Tool, вам необходимо отредактировать следующие две строки (начальный и конечный теги)

<!--MS:<SharePoint:SPSimpleSiteLink runat="server" CssClass="ms-siteicon-a" ID="x7917ecc8c38d4bd69f58e338eab54c8c">-->
[...]
<!--ME:</SharePoint:SPSimpleSiteLink>-->

к этому

<!--MS:<SharePoint:SPLinkButton runat="server" NavigateUrl="~sitecollection/" CssClass="ms-siteicon-a" ID="x7917ecc8c38d4bd69f58e338eab54c8c">-->
[...]
<!--ME:</SharePoint:SPLinkButton>-->

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

Ответ 3

Если вам нужна постоянная ссылка, почему вы используете некоторые элементы управления SharePoint/ASP.NET, просто установите эту ссылку на главной странице:))) Подумайте об этом проще всего, что будет работать в любой версии SharePoint.

Ответ 4

То же самое со мной, NavigateUrl не работает. Поэтому даже если вы попытаетесь изменить свойство href с помощью JQuery позже script, перезапишите href текущим URL-адресом сайта. Единственный способ - изменить идентификатор элемента 'a', чтобы предотвратить перезапись. Изменение идентификатора вызывает ошибку JavaScript с помощью Sharepoint, поэтому вам нужно создать скрытый скрытый элемент с тем же старым идентификатором элемента a. Все это работает с использованием главной страницы "Сиэтл".

Итак, в $(document).ready сделайте что-то вроде:

//read old link id
var oldLogoId = $("#DeltaSiteLogo > a").attr('id');
//change the id
$("#" + oldLogoId).attr('id','CustomSiteLogo');
//create dummy hidden element
$("#DeltaSiteLogo > a").after("<a id='tmpDeltaSiteLogo' href='#' style='display:none'>Dummy</a>");
//set the dummy id with old id value
$("#tmpDeltaSiteLogo").attr("id",oldLogoId );
//alter the link to point to the webroot 
$("#CustomSiteLogo").attr('href', window.location.protocol + "//" + window.location.host);

Ответ 5

используйте../в NavigateUrl. Это приведет к родительскому сайту.

Ответ 6

Если вам нужна динамическая ссылка, вы можете использовать UserControl на своей главной странице. Если вы, например, хотите всегда указывать на корневой адрес, но этот корневой адрес отличается в разных средах, вы можете сделать это в пользовательском элементе управления:

<asp:HyperLink CssClass="ms-siteicon-a" runat="server" ID="TG_CustomSiteLink" ToolTip="Home">
        <SharePoint:SiteLogoImage CssClass="ms-siteicon-img" name="onetidHeadbnnr0" id="onetidHeadbnnr2" LogoImageUrl="/_layouts/15/images/siteIcon.png?rev=23" runat="server" AlternateText="Home"/>
</asp:HyperLink>

И в вашем коде:

public partial class CustomSiteLogoLink : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var uri = HttpContext.Current.Request.Url;
        var url = uri.ToString();
        var rootUrl = url.Replace(HttpUtility.UrlDecode(uri.PathAndQuery), String.Empty);
        this.TG_CustomSiteLink.NavigateUrl = rootUrl;
    }
}

Ответ 7

Для параметра перенаправления семейства сайтов добавьте атрибут NavigateUrl к этому тегу и установите для него значение "~ sitecollection" Для параметра перенаправления текущего сайта: добавьте атрибут NavigateUrl в этот тег и установите для него значение "~site"

NavigateUrl="~sitecollection/"
NavigateUrl="~site/"

Нажмите здесь Подробнее...

Ответ 8

это самый простой sln, который я могу найти для простого логотипа, который ссылается на домашнюю страницу

<SharePoint:SPLinkButton id="index" ClientIDMode="Static"  CssClass="page-logo" runat="server" NavigateUrl="~sitecollection/">
<img src="<asp:Literal runat='server' Text='<%$SPUrl:~sitecollection/Style Library/images/logo.png%>' />" alt="Logo" />
</SharePoint:SPLinkButton>

P.S. да, попытка сделать <%$SPUrl:~sitecollection... вне <asp:Literal бросила исключение.