Ejemplo n.º 1
0
        /// <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;
        }