1

我破坏了我在本地安装的 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); 

我错过了什么?

4

1 回答 1

0

确保

  1. 为项目指定的 ID/路径正确;
  2. 该项目存在于您从代码访问的正确数据库中;
  3. 上下文用户至少对项目具有item:read访问权限。

此外,您还需要发布项目及其数据模板。

于 2020-02-06T18:21:24.950 回答