/// <summary>
    /// Initializes the target object for the page
    /// </summary>
    /// <remarks>Many pages have "target" objects that the page operates on. For instance, when viewing
    /// an event, the target object is an event. When looking up a directory, that's the target
    /// object. This method is intended to be overriden to initialize the target object for
    /// each page that needs it.</remarks>
    protected override void InitializeTargetObject()
    {
        base.InitializeTargetObject();

        //Describe a Registration Fee.  We will need this metadata to bind to the acceptable values for certain fields and for creating a new Registration Fee
        using (IConciergeAPIService proxy = GetConciegeAPIProxy())
        {
            eventMerchandiseClassMetadata = proxy.DescribeObject(msEventMerchandise.CLASS_NAME).ResultValue;
            eventMerchandiseFieldMetadata = eventMerchandiseClassMetadata.GenerateFieldDictionary();
        }

        var contextObject = APIExtensions.LoadObjectFromAPI(ContextID);

        if (contextObject.ClassType == msEvent.CLASS_NAME)
        {
            targetEvent = contextObject.ConvertTo<msEvent>();
            targetEventMerchandise = msEventMerchandise.FromClassMetadata(eventMerchandiseClassMetadata);
            lblTitleAction.Text = "Create";
        }
        else
        {
            targetEventMerchandise = contextObject.ConvertTo<msEventMerchandise>();
            targetEvent = LoadObjectFromAPI<msEvent>(targetEventMerchandise.Event);
            lblTitleAction.Text = "Edit";
        }

        if (targetEvent == null || targetEventMerchandise == null)
        {
            GoToMissingRecordPage();
            return;
        }

        targetEventMerchandise.Event = targetEvent.ID;

        loadEventOwners();
    }
 protected void unbindAndSave()
 {
     unbindRegistrationFee();
     targetEventMerchandise = SaveObject(targetEventMerchandise).ConvertTo<msEventMerchandise>();
 }