/// <summary>
        /// Adds or update group member's attributes using any page parameters that are attributes of the group.
        /// </summary>
        /// <param name="person">The person.</param>
        /// <param name="group">The group.</param>
        /// <param name="rockContext">The rock context.</param>
        private void AddOrUpdateGroupMemberAttributes(Person person, Group group, RockContext rockContext)
        {
            var groupMember = group.Members.Where(m => m.PersonId == person.Id).FirstOrDefault();
            AttributeService attributeService = new AttributeService(rockContext);

            // Load all the group member attributes for comparison below.
            var attributes = attributeService.GetGroupMemberAttributesCombined(group.Id, group.GroupTypeId);

            // In order to add attributes to the person, you have to first load them all
            groupMember.LoadAttributes(rockContext);

            foreach (var entry in PageParameters())
            {
                // skip the parameter if the group's group type doesn't have that one
                var attribute = attributes.Where(a => a.Key.Equals(entry.Key, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
                if (attribute == null)
                {
                    continue;
                }
                //attribute.SetAttributeValue
                groupMember.SetAttributeValue(entry.Key, (string)entry.Value);
            }
            groupMember.SaveAttributeValues(rockContext);
        }