private static string EvalComponentExpression(ExpressionParser parser, TemplateToken token, TemplateParserContext context) { TemplateToken.ParameterizedExpression pExpr = token.ExtractParameters(); string componentName = pExpr.MainExpression; if (pExpr.MainExpression.StartsWith("(") && pExpr.MainExpression.EndsWith(")")) { componentName = parser.Evaluate <string>(pExpr.MainExpression, context, token.TokenPosition); } TemplateParserContext newContext = (TemplateParserContext)context.CreateLocal(); foreach (string varName in pExpr.Parameters.Keys) { newContext.SetLocal(varName, parser.Evaluate(pExpr.Parameters[varName], context, token.TokenPosition)); } ControllerAction viewComponent = WebAppHelper.GetViewComponent(componentName); if (viewComponent == null) { throw new TemplateRenderingException("View component " + componentName + " not found", token.TokenPosition); } try { return(WebAppHelper.RunViewComponent(viewComponent, newContext)); } catch (Exception e) { throw new TemplateRenderingException("Error rendering view component " + componentName, e, token.TokenPosition); } }
private static string EvalTranslationExpression(ExpressionParser parser, TemplateToken token, TemplateParserContext context) { int parenIdx = token.Text.IndexOf('('); string tag = token.Text; string parameters = null; if (parenIdx > 0) { parameters = token.Text.Substring(parenIdx + 1); tag = token.Text.Substring(0, parenIdx).Trim(); } string translation = TranslationHelper.GetTranslation(context.View.ViewName, tag); if (translation == null) { return("{?{" + tag + "}?}"); } if (parameters != null) { IParserContext localContext = context.CreateLocal(); localContext.Set("__Translation__", translation); translation = parser.Evaluate <string>("string.Format(__Translation__," + parameters, localContext, token.TokenPosition); } return(translation); }