2009-11-19 3 views
4

J'ai écrit un contrôle personnalisé qui contient les éléments suivants:GetScriptReferences ne sont pas appelés

[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 
    } 
} 

Est-ce que quelqu'un sait d'une raison pour laquelle ni GetScriptDescriptors ou GetScriptReferences ne devrait pas appelée? Les autres parties du contrôle fonctionnent très bien.

Répondre

7

Vous devez enregistrer le contrôle comme 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); 
} 
+0

Ah c'est exact. Manqué ça. Je m'incline dans tes directions générales. – Kiddan

Questions connexes