2016-10-31 4 views
3

(я использую Sitecore 8.1 Update 3 с Glass Mapper.Sc версией 4.1.1.66)Glass Mapper не картирование некоторых свойств элемента

Я столкнулся с проблемой, когда некоторые из свойств элемента Sitecore являются не заполняется кодом через Glass Mapper. Значения в нашем элементе Content Base (Id, Name, Display Name, типичные поля Sitecore), кажется, заполняются правильно, но поля дочернего элемента (я назову его Обзор) не отображаются вообще. Они все строки, но все они заканчиваются нулевыми значениями, хотя значения Content Base выглядят правильно. У нас также есть карты классов детей, работающих в других областях, поэтому это не может быть причиной здесь.

Раньше в этом проекте у нас была проблема с Glass Mapper, где имена полей, которые включали пробелы, не читались. Тем не менее, я обязательно оставил без пробелов имена полей, но это не решает проблему.

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

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

Любые идеи о том, какие другие части я должен изучать?

ответ

1

Вам необходимо использовать VersionCountDisabler(), вы можете найти более подробную информацию об этом в previous question и этом blog post.

Использование disabler не является supposed to be required на Sitecore 8.1 и при использовании Language Fallback, но я могу подтвердить, что это проблема, и использование VersionCountDisabler() решило проблему для нас.

Внутреннее стекло проверяет наличие версии элемента, если оно не возвращает нуль. Кажется, что Sitecore вернет номер версии для элементов с макетом, но не для элементов данных.

Мы проводная вне Disabler несколько иной, чем при использовании файла global.asax, вместо исправления в запрос HTTP трубопроводов:

using Glass.Mapper.Sc; 
using Sitecore.Pipelines.HttpRequest; 

namespace MyProject.Custom.Pipelines.HttpRequest 
{ 
    public class ItemVersionCountDisablerBegin : HttpRequestProcessor 
    { 
     public override void Process(HttpRequestArgs args) 
     { 
      Sitecore.Context.Items["Glass::VersionCountDisabler"] = new VersionCountDisabler(); 
     } 
    } 

    public class ItemVersionCountDisablerEnd : HttpRequestProcessor 
    { 
     public override void Process(HttpRequestArgs args) 
     { 
      VersionCountDisabler disabler = Sitecore.Context.Items["Glass::VersionCountDisabler"] as VersionCountDisabler; 
      Sitecore.Context.Items["Glass::VersionCountDisabler"] = null; 
      disabler?.Dispose(); 
     } 
    } 
} 

А потом залатать это в запрос HTTP начала и конца трубопровода:

<pipelines> 
    <httpRequestBegin> 
    <processor type="MyProject.Custom.Pipelines.HttpRequest.ItemVersionCountDisablerBegin, MyProject.Custom" patch:before="*[1]"/> 
    </httpRequestBegin> 
    <httpRequestEnd> 
    <processor type="MyProject.Custom.Pipelines.HttpRequest.ItemVersionCountDisablerEnd, MyProject.Custom" /> 
    </httpRequestEnd>  
</pipelines> 
+0

Спасибо, что вернулись ко мне. Я пробовал это, но он, похоже, не работал. –

0

После некоторых экспериментов я нашел причину проблемы.

В моем классе отображения, вы увидите строку:

config.Field(f => f.HeaderPrefix).FieldName("AssetOverviewContentHeaderPrefix"); 

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

Вот в чем проблема. Когда я удалял «AssetOverviewContent» из имен полей, все работало нормально. Исходя из этого, я сделал еще несколько экспериментов.

Я нашел, что имена полей длиной до 23 символов работали нормально. 24 или более, и они не будут отображаться. Я понятия не имею, почему это число, в частности, является пределом, но я предполагаю, что есть какое-то другое отображение, происходящее где-то, нажимающее предел.

Еще немного экспериментов также показало, что отображение с использованием FieldId также не работает. Гиды будут длиннее 23 символов, поэтому это имеет смысл. Тем не менее, вы не можете сделать руководство менее чем за 23 символа, поэтому я не могу подтвердить.

Я могу в конце концов взглянуть на код Glass Mapper, чтобы узнать, смогу ли я отследить ответ. Но теперь, когда я знаю, что есть проблема, я могу избежать этого.

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