コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="tag"></param>
        /// <param name="parameterObject"></param>
        /// <returns></returns>
        public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject)
        {
            IterateContext iterate = (IterateContext)ctx.GetAttribute(tag);

            if (iterate == null)
            {
                string propertyName = ((BaseTag)tag).Property;
                object collection;
                if (!string.IsNullOrEmpty(propertyName))
                {
                    collection = ObjectProbe.GetMemberValue(parameterObject, propertyName, AccessorFactory);
                }
                else
                {
                    collection = parameterObject;
                }
                iterate = new IterateContext(collection);
                ctx.AddAttribute(tag, iterate);
            }
            if (iterate.HasNext)
            {
                return(INCLUDE_BODY);
            }
            return(SKIP_BODY);
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="tag"></param>
        /// <param name="parameterObject"></param>
        /// <returns></returns>
        /// Updated By: Richard Beacroft
        /// Updated Date: 11\10\2013
        /// Description: Enables one to be able to have sql text within an iterate element that references the current item as "[]."
        /// This is then parsed, along with any reflection path suffix to get the object instance the used is interested in.
        /// and add it to an attributes collection for later use.
        public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject)
        {
            var iterate = (IterateContext)ctx.GetAttribute(tag);

            if (iterate == null)
            {
                var baseTag = (BaseTag)tag;

                object collection;

                if (!string.IsNullOrEmpty(baseTag.Property))
                {
                    // this will either leave the property name as it is, or if it starts with "[].", the
                    // current iterate context item value will be used, with the rest of the property name
                    // walked to determine the field/property to get the value from.
                    collection = _tagPropertyProbe.GetMemberPropertyValue(ctx, baseTag, parameterObject);
                }
                else
                {
                    collection = parameterObject;
                }

                iterate = new IterateContext(collection);

                ctx.AddAttribute(tag, iterate);

                // if there is another item in the iterate array, then we need to include the body.
                if (iterate.MoveNext())
                {
                    return(INCLUDE_BODY);
                }

                iterate.IsCompleted = true;

                return(SKIP_BODY);
            }

            if (iterate.IsCompleted)
            {
                // reset the context to cater for nested iterations.
                ctx.RemoveAttibute(tag);
                // now re-process the tag which will re-add the now modified tag element back to the attributes collection.
                return(DoStartFragment(ctx, tag, parameterObject));
            }
            else if (iterate.HasNext || iterate.IsLast)
            {
                if (iterate.MoveNext())
                {
                    return(INCLUDE_BODY);
                }
            }

            return(SKIP_BODY);
        }
コード例 #3
0
ファイル: IterateTagHandler.cs プロジェクト: reckcn/CSharp
		/// <summary>
		/// 
		/// </summary>
		/// <param name="ctx"></param>
		/// <param name="tag"></param>
		/// <param name="parameterObject"></param>
		/// <returns></returns>
		public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject) 
		{
			IterateContext iterate = (IterateContext) ctx.GetAttribute(tag);
			if (iterate == null) 
			{
				string propertyName = ((BaseTag)tag).Property;
				object collection;
				if (!string.IsNullOrEmpty(propertyName)) 
				{
					collection = ObjectProbe.GetMemberValue(parameterObject, propertyName, AccessorFactory);
				} 
				else 
				{
					collection = parameterObject;
				}
				iterate = new IterateContext(collection);
				ctx.AddAttribute(tag, iterate);
			}
			if (iterate.HasNext) 
			{
				return INCLUDE_BODY;
			}
		    return SKIP_BODY;
		}
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="tag"></param>
        /// <param name="parameterObject"></param>
        /// <returns></returns>
        /// Updated By: Richard Beacroft
        /// Updated Date: 11\10\2013
        /// Description: Enables one to be able to have sql text within an iterate element that references the current item as "[]."
        /// This is then parsed, along with any reflection path suffix to get the object instance the used is interested in.
        /// and add it to an attributes collection for later use.
        public override int DoStartFragment(SqlTagContext ctx, SqlTag tag, object parameterObject)
        {
            var iterate = (IterateContext)ctx.GetAttribute(tag);

            if (iterate == null)
            {
                var baseTag = (BaseTag)tag;

                object collection;

                if (!string.IsNullOrEmpty(baseTag.Property))
                {
                    // this will either leave the property name as it is, or if it starts with "[].", the 
                    // current iterate context item value will be used, with the rest of the property name
                    // walked to determine the field/property to get the value from.
                    collection = _tagPropertyProbe.GetMemberPropertyValue(ctx, baseTag, parameterObject);
                }
                else
                {
                    collection = parameterObject;
                }

                iterate = new IterateContext(collection);

                ctx.AddAttribute(tag, iterate);

                // if there is another item in the iterate array, then we need to include the body.
                if (iterate.MoveNext())
                    return INCLUDE_BODY;

                iterate.IsCompleted = true;

                return SKIP_BODY;
            }

            if (iterate.IsCompleted)
            {
                // reset the context to cater for nested iterations.
                ctx.RemoveAttibute(tag);
                // now re-process the tag which will re-add the now modified tag element back to the attributes collection.
                return DoStartFragment(ctx, tag, parameterObject);
            }
            else if (iterate.HasNext || iterate.IsLast)
            {
                if (iterate.MoveNext())
                    return INCLUDE_BODY;
            }

            return SKIP_BODY;
        }