Regarding the thrown error. Mike Edwards pointed out the underlying issue:
There is an issue with the view rendering pipeline where Glass will return null for a missing language, but Sitecore returns an object. Causing the Dictionary Error.
Activate the excluded config z.Glass.Mapper.Sc.ViewRender.config.exclude
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<mvc.getRenderer>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetViewRenderer, Sitecore.Mvc">
<patch:attribute name="type">
Glass.Mapper.Sc.Mvc.Pipelines.Response.GetRenderer.GetViewRendererWithItemValidation, Glass.Mapper.Sc.Mvc
</patch:attribute>
</processor>
</mvc.getRenderer>
</pipelines>
</sitecore>
</configuration>
Use this class to override this behavior:
https://github.com/mikeedwards83/Glass.Mapper/blob/master/Source/Glass.Mapper.Sc.Mvc/Pipelines/Response/GetRenderer/GetViewRenderWithItemValidation.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sitecore.Mvc.Extensions;
using Sitecore.Mvc.Pipelines.Response.GetRenderer;
using Sitecore.Mvc.Presentation;
namespace Glass.Mapper.Sc.Mvc.Pipelines.Response.GetRenderer
{
/// <summary>
/// This class overrides Sitecores default view rendering. Sitecore by default will return a RenderingItem even
/// it the target item does not exist.
/// </summary>
public class GetViewRendererWithItemValidation : GetViewRenderer
{
protected override Renderer GetRenderer(Rendering rendering, GetRendererArgs args)
{
var viewRenderer = base.GetRenderer(rendering, args) as ViewRenderer;
if (viewRenderer == null)
return null;
// Ignore item check when in page editor
if (Utilities.IsPageEditor || Utilities.IsPageEditorEditing)
return viewRenderer;
// Override renderer to null when there is an unpublished item refererenced by underlying view
return viewRenderer.Rendering.Item != null && viewRenderer.Rendering.RenderingItem.ValueOrDefault(i => i.InnerItem) != null
? viewRenderer
: null;
}
}
}