«Ссылка на объект не установлена ​​для экземпляра объекта» после установки Sitecore 9.3 и моих сборок - PullRequest
1 голос
/ 23 января 2020

Я сломал локальную установку Sitecore, поэтому решил установить чистую версию 9.3. Я добавил свой собственный проект обратно, но теперь я получаю ошибки ниже, есть идеи?

@using Sitecore.Mvc
@using Sitecore.Mvc.Analytics.Extensions
@using Sitecore.Mvc.Presentation
@using TAC.Utils
@using TAC.Utils.Helpers
@model RenderingModel
@{
    Layout = "~/Views/Guard/Layouts/_Head.cshtml";

    var decorationBannerUrl = Html.SitecoreMediaUrl(Statics.FieldNames.DecorationBanner);
    var mobileBannerUrl = Html.SitecoreMediaUrl("MobileBanner");


    var headerCssClass = "page-header";
    var headerBackgroundStyle = "";
    var mobileBackgroundStyle = "";

    if (!String.IsNullOrEmpty(decorationBannerUrl))
    {
        headerCssClass = headerCssClass + " " + "bg-media bg-parallax";
        headerBackgroundStyle = string.Format("background-image: url('{0}')", decorationBannerUrl);
    }
    if (!String.IsNullOrEmpty(mobileBannerUrl))
    {
        headerCssClass = headerCssClass + " " + "bg-media bg-parallax";
        mobileBackgroundStyle = string.Format("background-image: url('{0}')", mobileBannerUrl);
    }
    else
    {
        if (!String.IsNullOrEmpty(decorationBannerUrl))
        {
            // no special mobile image exists so fall back to the desktop header image
            headerCssClass = headerCssClass + " " + "bg-media bg-parallax";
            mobileBackgroundStyle = string.Format("background-image: url('{0}')", decorationBannerUrl);
        }
    }

}
<div id="main-container">
    <header class="siteheader">
        @Html.Sitecore().Placeholder(Statics.PlaceholderKeys.HeaderNavigation)
    </header>
    <main role="main"> 
        <div class="visible-lg visible-md">
            @using (Html.BeginHeader(new { @class = headerCssClass, style = headerBackgroundStyle }))
            {
                @Html.Sitecore().Placeholder(Statics.PlaceholderKeys.HeaderContent)
            }
        </div>
        <div class="visible-sm visible-xs">
            <div>
            @using (Html.BeginHeader(new { @class = headerCssClass, style = mobileBackgroundStyle }))
            {
            }
            </div>
            @Html.Sitecore().Placeholder(Statics.PlaceholderKeys.HeaderContent)
        </div>
        <section class="section section-full">
            @Html.Sitecore().DynamicPlaceholder(Statics.PlaceholderKeys.MainContent)
        </section>
    </main>
    <div>
                @Html.Sitecore().Placeholder(Statics.PlaceholderKeys.FooterContent)          
    </div>
</div>
using System;
using System.Text.RegularExpressions;
using Sitecore.Data.Items;
using Sitecore.Links;

namespace TAC.Utils.Helpers
{
    public class CustomLinkProvider : Sitecore.Links.LinkProvider
    {
        public override string GetItemUrl(Item item, UrlOptions options)
        {
            string query = String.Format("/*/system/Aliases//*[@@templateid='{0}' and contains(@Linked item, '{1}')]", Sitecore.TemplateIDs.Alias, item.ID);
            Sitecore.Data.Items.Item alias = Sitecore.Context.Database.SelectSingleItem(query);
            string aliasUrl = string.Empty;
            if (alias != null)
            {
                aliasUrl = base.GetItemUrl(alias, options);
                //remove the system part of the url that is returned.
                aliasUrl = Regex.Replace(aliasUrl, @"/sitecore/system/aliases", "", RegexOptions.IgnoreCase);
                aliasUrl = aliasUrl.Replace("-", " ");
                return aliasUrl;
            }
            else
            {
                return base.GetItemUrl(item, options);
            }
        }
    }
}

Ошибка, возникающая при просмотре редактора опыта, выглядит следующим образом:

Представление с отображением ошибок: /Views/Guard/Layouts/Default.cshtml: ошибка при просмотре рендеринга: '/Views/Guard/Layouts/Default.cshtml' (модель: 'Sitecore. Mvc .Presentation.RenderingModel, Sitecore. Mvc').

И ошибка, которую я получаю на реальном сайте:

Ссылка на объект не установлена ​​для экземпляра объекта. Описание: произошло необработанное исключение.

Сведения об исключении: System.NullReferenceException: для ссылки на объект не задан экземпляр объекта.

В этой строке, похоже, происходит ошибка:

var canonical = CLP.GetItemUrl(Model.Item, options); 

Чего мне не хватает?

1 Ответ

0 голосов
/ 06 февраля 2020

Убедитесь, что

  1. ID / путь, указанный для элемента, правильный;
  2. элемент существует в правильной базе данных, к которой вы обращаетесь из кода;
  3. у пользователя контекста есть элемент : право чтения для чтения как минимум.

Кроме того, вам также необходимо опубликовать sh элемент и его шаблон данных. .

...