protected void ShowEdit(Rock.Web.Cache.BlockInstanceLocation location, int blockInstanceId)
        {
            Rock.CMS.BlockInstance blockInstance = blockInstanceService.Get(blockInstanceId);
            hfBlockLocation.Value = location.ConvertToString();

            if (blockInstance != null)
            {
                lAction.Text               = "Edit ";
                hfBlockInstanceId.Value    = blockInstance.Id.ToString();
                ddlBlockType.SelectedValue = blockInstance.Block.Id.ToString();
                tbBlockName.Text           = blockInstance.Name;
            }
            else
            {
                lAction.Text               = "Add ";
                hfBlockInstanceId.Value    = "0";
                ddlBlockType.SelectedIndex = -1;
                tbBlockName.Text           = string.Empty;
            }

            lAction.Text += hfBlockLocation.Value;

            pnlLists.Visible   = false;
            pnlDetails.Visible = true;
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            Rock.CMS.BlockInstance blockInstance;

            int blockInstanceId = 0;

            if (!Int32.TryParse(hfBlockInstanceId.Value, out blockInstanceId))
            {
                blockInstanceId = 0;
            }

            if (blockInstanceId == 0)
            {
                blockInstance = new Rock.CMS.BlockInstance();

                Rock.Web.Cache.BlockInstanceLocation location = hfBlockLocation.Value.ConvertToEnum <Rock.Web.Cache.BlockInstanceLocation>();
                if (location == Rock.Web.Cache.BlockInstanceLocation.Layout)
                {
                    blockInstance.Layout = _page.Layout;
                    blockInstance.PageId = null;
                }
                else
                {
                    blockInstance.Layout = null;
                    blockInstance.PageId = _page.Id;
                }

                blockInstance.Zone = _zoneName;

                Rock.CMS.BlockInstance lastBlock =
                    blockInstanceService.GetByLayoutAndPageIdAndZone(null, _page.Id, _zoneName).
                    OrderByDescending(b => b.Order).FirstOrDefault();

                if (lastBlock != null)
                {
                    blockInstance.Order = lastBlock.Order + 1;
                }
                else
                {
                    blockInstance.Order = 0;
                }

                blockInstanceService.Add(blockInstance, CurrentPersonId);
            }
            else
            {
                blockInstance = blockInstanceService.Get(blockInstanceId);
            }

            blockInstance.Name    = tbBlockName.Text;
            blockInstance.BlockId = Convert.ToInt32(ddlBlockType.SelectedValue);

            blockInstanceService.Save(blockInstance, CurrentPersonId);

            Rock.Security.Authorization.CopyAuthorization(_page, blockInstance, CurrentPersonId);
            _page.FlushBlockInstances();

            BindGrids();

            pnlDetails.Visible = false;
            pnlLists.Visible   = true;
        }