Search code examples
c#asp.net-ajaxiscriptcontrol

GetScriptReferences does not get called


I have written a Custom Control that contains the following:

[assembly: System.Web.UI.WebResource("InSysControls.AssignmentLists.AssignmentLists.js", "text/javascript")]
namespace InSysControls
{
    [ToolboxData("<{0}:AssignmentLists ID='AssignmentListsID' runat=\"server\"> </{0}:AssignmentLists>"), ParseChildren(true, "Items")]
    public class AssignmentLists : CompositeDataBoundControl, IScriptControl, INamingContainer
    {
        #region IScriptControl Members

        public IEnumerable<ScriptDescriptor> GetScriptDescriptors() {
            ScriptControlDescriptor descriptor = new ScriptControlDescriptor(this.GetType().FullName, this.ClientID);
            yield return descriptor;
        }

        public IEnumerable<ScriptReference> GetScriptReferences() {
            yield return new ScriptReference("InSysControls.AssignmentLists.AssignmentLists.js", "InSysControls");
        }

        #endregion
    }
}

Does anyone know of a reason why neither GetScriptDescriptors or GetScriptReferences shouldn't get called? The other parts of the Control works just fine.


Solution

  • You need to register the control as a ScriptControl:

    protected override void OnPreRender(EventArgs e)
    {
    
        if (!this.DesignMode)
        {
    
            // Link the script up with the script manager
            ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
            if (scriptManager != null)
            {
                scriptManager.RegisterScriptControl(this);
            }
    
        }
    
        base.OnPreRender(e);
    
    }
    
    protected override void Render(HtmlTextWriter writer)
    {
        if (!this.DesignMode)
        {
            ScriptManager.GetCurrent(this.Page).RegisterScriptDescriptors(this);
        }
        base.Render(writer);
    }