protected virtual bool DispatchPossibleModelException(RenderingErrorModel model, RequestContext context, TextWriter output)
        {
            var invalidOp = model.Exception as InvalidOperationException;

            if (invalidOp?.InnerException != null && invalidOp.InnerException.Message.StartsWith("The model item passed into the dictionary is of type"))
            {
                model.Exception = invalidOp.InnerException;

                if (Context.PageMode.IsPreview || Context.PageMode.IsExperienceEditor)
                {
                    var viewPath = ResolveModelErrorViewPath(model, context);

                    if (string.IsNullOrWhiteSpace(viewPath))
                    {
                        CreateViewErrorRenderer().RenderNullModelMessage(new HtmlTextWriter(output), model);
                    }
                    else
                    {
                        RenderView(viewPath, model, context, output);
                    }
                }

                return(true);
            }

            return(false);
        }
        protected virtual void DispatchException(RenderingErrorModel model, RequestContext context, TextWriter output)
        {
            var viewPath = ResolveErrorViewPath(model, context);

            if (string.IsNullOrWhiteSpace(viewPath))
            {
                throw new Exception("Error occurred while rendering. See the inner exception for details.", model.Exception);
            }

            RenderView(viewPath, model, context, output);
        }
 protected virtual string ResolveModelErrorViewPath(RenderingErrorModel model, RequestContext context)
 {
     return(ModelErrorViewPath);
 }
        protected virtual bool DispatchPossibleModelException(RenderingErrorModel model, RequestContext context, TextWriter output)
        {
            var invalidOp = model.Exception as InvalidOperationException;
            if (invalidOp == null) return false;

            if (invalidOp.InnerException != null && invalidOp.InnerException.Message.StartsWith("The model item passed into the dictionary is of type"))
            {
                model.Exception = invalidOp.InnerException;

                if (Context.PageMode.IsPreview || Context.PageMode.IsPageEditor)
                {
                    var viewPath = ResolveModelErrorViewPath(model, context);

                    if (string.IsNullOrWhiteSpace(viewPath))
                        CreateViewErrorRenderer().RenderNullModelMessage(new HtmlTextWriter(output), model);
                    else RenderView(viewPath, model, context, output);
                }

                return true;
            }

            return false;
        }
        protected virtual void DispatchException(RenderingErrorModel model, RequestContext context, TextWriter output)
        {
            var viewPath = ResolveErrorViewPath(model, context);

            if (string.IsNullOrWhiteSpace(viewPath))
                throw new Exception("Error occurred while rendering. See the inner exception for details.", model.Exception);

            RenderView(viewPath, model, context, output);
        }
 protected virtual string ResolveModelErrorViewPath(RenderingErrorModel model, RequestContext context)
 {
     return ModelErrorViewPath;
 }