Ошибка Sitecore Glass.Mapper, когда элемент недоступен

У нас есть сайт Sitecore, использующий Glass.Mapper. У нас также есть простой двухэтапный рабочий процесс «Черновик > Готово к публикации» для всех элементов. Есть глобальные элементы, представляющие собой промо, которые можно размещать на страницах. Авторы создают промо, затем создают страницы и размещают промо на страницах.

Если страница опубликована, но промо не опубликовано, страница возвращает эту ошибку: Конструктор типа «OurSite.Sitecore.Models.IPromo» не найден.

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


person Scott    schedule 16.09.2015    source источник
comment
какую версию стекла вы используете   -  person Elena Zlateva    schedule 16.09.2015
comment
Версия Glass.Mapper.Sc: 3.2.3.49   -  person Scott    schedule 17.09.2015


Ответы (2)


Другим вариантом может быть проверка источника данных компонентов в конвейере getRenderer. Марек написал об этом в блоге твердое решение:

http://www.skillcore.net/sitecore/sitecore-automated-validation-of-mvc-rendering-datasource

Это также обрабатывает сценарий, когда компоненты без источника данных (т. е. элемент был удален) разбивают страницу в PageEditor.

При этом я также считаю, что, кроме того, у вас должна быть правильная стратегия исключений. Ссылка, опубликованная Джимом Ноэллшем, является хорошей. Я помню, что это от Чарли Турано тоже было солидным:

http://www.hhogdev.com/blog/2015/june/mvc-rendering-exception-handler.aspx

person RvanDalen    schedule 17.09.2015
comment
В итоге мы реализовали обработку исключений рендеринга Jim Noellsch MVC. Очень чистое решение. - person Scott; 01.12.2015

Предполагая, что IPromo является интерфейсом, преобразуйте его в модель класса Promo. Если это решение MVC, вы также можете переопределить метод OnException, чтобы незаметно подавить отсутствующий контент.

person Jim Noellsch    schedule 16.09.2015
comment
Любые мысли о том, где я помещаю код OnException в решение Sitecore MVC, чтобы подавить рендеринг (представление MVC), который вызывает ошибки? - person Scott; 17.09.2015
comment
Если они не являются визуализацией контроллера, вам, возможно, придется подключиться к конвейеру mvc.getRendering, как описано Джоном Уэстом здесь - person Jim Noellsch; 17.09.2015