Quantcast
Channel: ASP.NET AJAX + Ajax Control Toolkit (ACT)
Viewing all articles
Browse latest Browse all 5678

TargetControlID cannot be empty or null

$
0
0

See error below(near the end of the post).

************************************ Site.Master *********************************************

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="AJAXTest.aspx.cs" Inherits="AJAXTest.AJAXTest" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:Button ID="Button1" runat="server" Text="Open Popup" />
    <asp:Panel ID="Panel1" CssClass="modalPopup" runat="server">
        Welcome to aspnetdotmasters
        <asp:Button ID="OK" runat="server" Text="OK" />
    </asp:Panel>
    <ajaxToolkit:RoundedCornersExtender ID="Panel1_RoundedCornersExtender" runat="server" BehaviorID="Panel1_RoundedCornersExtender" TargetControlID="Panel1" />
    <ajaxToolkit:AnimationExtender ID="Panel1_AnimationExtender" runat="server" BehaviorID="Panel1_AnimationExtender" TargetControlID="Panel1">
    </ajaxToolkit:AnimationExtender>
    <ajaxToolkit:BalloonPopupExtender ID="Panel1_BalloonPopupExtender" runat="server" BehaviorID="Panel1_BalloonPopupExtender" CustomCssUrl="" DynamicServicePath="" ExtenderControlID="" TargetControlID="Panel1">
    </ajaxToolkit:BalloonPopupExtender>
    <ajaxToolkit:DropShadowExtender ID="Panel1_DropShadowExtender" runat="server" BehaviorID="Panel1_DropShadowExtender" TargetControlID="Panel1" />
    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" BackgroundCssClass="modalBackground" OkControlID="OK"
        PopupControlID="Panel1" TargetControlID="Button1"></ajaxToolkit:ModalPopupExtender>    
</asp:Content>

********************************************************* AJAXTest.aspx ********************************************************************

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="AJAXTest.aspx.cs" Inherits="AJAXTest.AJAXTest" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:Button ID="Button1" runat="server" Text="Open Popup" />
    <asp:Panel ID="Panel1" CssClass="modalPopup" runat="server">
        Welcome to aspnetdotmasters
        <asp:Button ID="OK" runat="server" Text="OK" />
    </asp:Panel>
    <ajaxToolkit:RoundedCornersExtender ID="Panel1_RoundedCornersExtender" runat="server" BehaviorID="Panel1_RoundedCornersExtender" TargetControlID="Panel1" />
    <ajaxToolkit:AnimationExtender ID="Panel1_AnimationExtender" runat="server" BehaviorID="Panel1_AnimationExtender" TargetControlID="Panel1">
    </ajaxToolkit:AnimationExtender>
    <ajaxToolkit:BalloonPopupExtender ID="Panel1_BalloonPopupExtender" runat="server" BehaviorID="Panel1_BalloonPopupExtender" CustomCssUrl="" DynamicServicePath="" ExtenderControlID="" TargetControlID="Panel1">
    </ajaxToolkit:BalloonPopupExtender>
    <ajaxToolkit:DropShadowExtender ID="Panel1_DropShadowExtender" runat="server" BehaviorID="Panel1_DropShadowExtender" TargetControlID="Panel1" />
    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" BackgroundCssClass="modalBackground" OkControlID="OK"
        PopupControlID="Panel1" TargetControlID="Button1"></ajaxToolkit:ModalPopupExtender>    
</asp:Content>

********************************************* ExtenderControlBase.cs **********************************************************

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace AjaxControlToolkit {

    // 1) It performs the hookup between an Extender (server) control and the behavior it instantiates
    // 2) It manages interacting with the ScriptManager to get the right scripts loaded
    // 3) It adds some debugging features like ValidationScript and ScriptPath
    [Themeable(true)]
    [ClientScriptResource(null, Constants.BaseScriptName)]
    public abstract class ExtenderControlBase : ExtenderControl, IControlResolver {
        private Dictionary<string, Control> _findControlHelperCache = new Dictionary<string, Control>();
        private string _clientState;
        private bool _enableClientState;
        private bool _loadedClientStateValues;

        // Called when the ExtenderControlBase fails to locate a control referenced by a TargetControlID.
        // In this event, user code is given an opportunity to find the control.        
        public event ResolveControlEventHandler ResolveControlID;

        [DefaultValue(true)]
        public bool Enabled {
            get {
                return GetPropertyValue("Enabled", true);
            }
            set {
                SetPropertyValue("Enabled", value);
            }
        }

        [Browsable(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public string ClientState {
            get { return _clientState; }
            set { _clientState = value; }
        }

        [ExtenderControlProperty()]
        [ClientPropertyName("id")]
        public string BehaviorID {
            get {
                string id = GetPropertyValue("BehaviorID", "");
                return (string.IsNullOrEmpty(id) ? ClientID : id);
            }
            set {
                SetPropertyValue("BehaviorID", value);
            }
        }

        private string GetClientStateFieldID() {
            return string.Format(CultureInfo.InvariantCulture, "{0}_ClientState", ID);
        }

        // On Init we load target properties values and process data-binding handlers.
        protected override void OnInit(EventArgs e) {
            if(EnableClientState) {
                CreateClientStateField();
            }
            Page.PreLoad += new EventHandler(Page_PreLoad);
            base.OnInit(e);
        }

        void Page_PreLoad(object sender, EventArgs e) {
            // Needs to happen sometime after ASP.NET populates the control
            // values from the postback but sometime before Load so that
            // the values will be available to controls then. PreLoad is
            // therefore the obvious choice.
            LoadClientStateValues();
        }

        private HiddenField CreateClientStateField() {
            // add a hidden field so we'll pick up the value
            HiddenField field = new HiddenField();
            field.ID = GetClientStateFieldID();
            Controls.Add(field);
            ClientStateFieldID = field.ID;
            return field;
        }

        // Loads the values for each of the TargetProperties classes coming back from a postback.
        private void LoadClientStateValues() {
            if(EnableClientState && !string.IsNullOrEmpty(ClientStateFieldID)) {
                HiddenField hiddenField = (HiddenField)NamingContainer.FindControl(ClientStateFieldID);

                if((hiddenField != null) && !string.IsNullOrEmpty(hiddenField.Value)) {
                    ClientState = hiddenField.Value;
                }
            }

            if(null != ClientStateValuesLoaded) {
                ClientStateValuesLoaded(this, EventArgs.Empty);
            }

            _loadedClientStateValues = true;
        }

        protected event EventHandler ClientStateValuesLoaded;

        // Save any values in the TargetProperties objects out to client state so they are available
        // on the client side.
        private void SaveClientStateValues() {
            if(EnableClientState) {
                HiddenField hiddenField = null;

                // if we don't have a value here, this properties
                // object may have been created dynamically in code
                // so we create the field on demand.
                //
                if(string.IsNullOrEmpty(ClientStateFieldID)) {
                    hiddenField = CreateClientStateField();
                } else {
                    hiddenField = (HiddenField)NamingContainer.FindControl(ClientStateFieldID);
                }

                if(hiddenField != null) {
                    hiddenField.Value = ClientState;
                }
            }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        [ExtenderControlProperty()]
        [IDReferenceProperty(typeof(HiddenField))]
        [DefaultValue("")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public string ClientStateFieldID {
            get { return GetPropertyValue("ClientStateFieldID", ""); }
            set { SetPropertyValue("ClientStateFieldID", value); }
        }

        [Browsable(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public bool EnableClientState {
            get { return _enableClientState; }
            set { _enableClientState = value; }
        }

        // The type of the client component - e.g. "ConfirmButtonBehavior"
        protected virtual string ClientControlType {
            get {
                ClientScriptResourceAttribute attr = (ClientScriptResourceAttribute)TypeDescriptor.GetAttributes(this)[typeof(ClientScriptResourceAttribute)];

                return attr.ComponentType;
            }
        }

        public Control ResolveControl(string controlId) {
            return FindControl(controlId);
        }

        public override Control FindControl(string id) {

            // Use FindControlHelper so that more complete searching and OnResolveControlID will be used
            return FindControlHelper(id);
        }

        protected Control TargetControl {
            get {
                return FindControlHelper(TargetControlID);
            }
        }

        // This helper automates locating a control by ID.
        // It calls FindControl on the NamingContainer, then the Page.  If that fails, it fires the resolve event.
        protected Control FindControlHelper(string id) {
            Control c = null;
            if(_findControlHelperCache.ContainsKey(id)) {
                c = _findControlHelperCache[id];
            } else {
                c = base.FindControl(id);  // Use "base." to avoid calling self in an infinite loop
                Control nc = NamingContainer;
                while((null == c) && (null != nc)) {
                    c = nc.FindControl(id);
                    nc = nc.NamingContainer;
                }
                if(null == c) {
                    // Note: props MAY be null, but we're firing the event anyway to let the user
                    // do the best they can
                    ResolveControlEventArgs args = new ResolveControlEventArgs(id);

                    OnResolveControlID(args);
                    c = args.Control;

                }
                if(null != c) {
                    _findControlHelperCache[id] = c;
                }
            }
            return c;
        }

        // Fired when the extender can not locate it's target control. This may happen if the
        // target control is in a different naming container.
        // By handling this event, user code can locate the target and return it via the ResolveControlEventArgs.Control property.
        protected virtual void OnResolveControlID(ResolveControlEventArgs e) {
            if(ResolveControlID != null) {
                ResolveControlID(this, e);
            }
        }

        protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors(Control targetControl) {
            if(!Enabled || !targetControl.Visible)
                return null;

            EnsureValid();

            ScriptBehaviorDescriptor descriptor = new ScriptBehaviorDescriptor(ClientControlType, targetControl.ClientID);

            // render the attributes for this element
            RenderScriptAttributes(descriptor);

            // render profile bindings
            //RenderProfileBindings(descriptor);

            // render any child scripts we need to.
            RenderInnerScript(descriptor);

            return new List<ScriptDescriptor>(new ScriptDescriptor[] { descriptor });
        }

        // Called during rendering to give derived classes a chance to validate their properties
        public virtual void EnsureValid() {
            CheckIfValid(true);
        }

        protected virtual bool CheckIfValid(bool throwException) {
            bool valid = true;
            foreach(PropertyDescriptor prop in TypeDescriptor.GetProperties(this)) {
                // If the property is tagged with RequiredPropertyAttribute, but doesn't have a value, throw an exception
                if((null != prop.Attributes[typeof(RequiredPropertyAttribute)]) && ((null == prop.GetValue(this)) || !prop.ShouldSerializeValue(this))) {
                    valid = false;
                    if(throwException) {
                        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} missing required {1} property value for {2}.", GetType().ToString(), prop.Name, ID), prop.Name);
                    }
                }
            }
            return valid;
        }

        // Walks each of the properties in the TargetProperties object and renders script for them.
        protected virtual void RenderScriptAttributes(ScriptBehaviorDescriptor descriptor) {
            try {
                ComponentDescriber.DescribeComponent(this, new ScriptComponentDescriptorWrapper(descriptor), this.Page, this);
            } finally { }
        }

        // Allows generation of markup within the behavior declaration in XML script
        protected virtual void RenderInnerScript(ScriptBehaviorDescriptor descriptor) {
        }

        protected override IEnumerable<ScriptReference> GetScriptReferences() {
            if(!Enabled)
                return null;

            return ToolkitResourceManager.GetControlScriptReferences(GetType());
        }

        protected V GetPropertyValue<V>(string propertyName, V nullValue) {
            if(ViewState[propertyName] == null) {
                return nullValue;
            }
            return (V)ViewState[propertyName];
        }

        protected void SetPropertyValue<V>(string propertyName, V value) {
            ViewState[propertyName] = value;
        }
        protected override void OnPreRender(EventArgs e) {

+++++++++++++++++++++++++++Error is here - The TargetControlID of 'ModalPopupExtender1' is not valid. The value cannot be null or empty. +++++++++++++++
            base.OnPreRender(e);

            RegisterLocalization();

            if(Enabled && TargetControl.Visible) {
                SaveClientStateValues();
            }
        }

        void RegisterLocalization() {
            var localeKey = new Localization().GetLocaleKey();
            if(String.IsNullOrEmpty(localeKey))
                return;

            var script = String.Format(@"Sys.Extended.UI.Localization.SetLocale(""{0}"");", localeKey);
            Page.ClientScript.RegisterStartupScript(GetType(), "f93b988bab7e44ffbcff635ee599ade2", script, true);
        }

        protected override void OnLoad(EventArgs e) {
            if(!_loadedClientStateValues) {
                LoadClientStateValues();
            }

            base.OnLoad(e);

            ToolkitResourceManager.RegisterCssReferences(this);
        }
    }

}


Viewing all articles
Browse latest Browse all 5678

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>