/// <summary> /// Gets the sequence exposed by the given expression. /// </summary> /// <returns>The sequence.</returns> /// <param name="expression">Expression.</param> /// <param name="model">Model.</param> /// <param name="context">The rendering context.</param> private IEnumerable GetSequence(string expression, IModel model, IRenderingContext context) { ExpressionResult result; IEnumerable output; try { result = model.Evaluate(expression, context); } catch(Exception ex) { string message = String.Format(ExceptionMessages.ExpressionEvaluationException, ZptConstants.Tal.Namespace, ZptConstants.Tal.DefineAttribute, expression, context.Element.Name); throw new ModelEvaluationException(message, ex) { ExpressionText = expression, ElementName = context.Element.Name, }; } if(result.CancelsAction) { output = null; } else { try { output = result.GetValue<IEnumerable>(); } catch(InvalidCastException ex) { string message = String.Format(ExceptionMessages.TalRepeatExpressionMustEvaluateToIEnumerable, typeof(IEnumerable).FullName, expression, context.Element.Name); throw new ModelEvaluationException(message, ex) { ExpressionText = expression, ElementName = context.Element.Name, }; } } return output; }