2009-03-07 6 views
0

je la structure suivante sur un UserControl qui est chargé par une page (Parent UC):fonction Javascript ne soit pas appelé - ASP.NET et UpdatePanel

<UpdatePanel> 
    <UpdatePanel> 
    .. In the codebehind, it loads a Child user control at runtime 
    </UpdatePanel> 
</UpdatePanel> 

L'UC a OnPageLoad enregistre un script.

ScriptManager.RegisterStartupScript(this, typeof(Page), "Load_" + this.ClientID, base.GetRegisterScript(this.ClientID), true); 

La fonction JS n'est exécuté sur postbacks async. Si je supprime les UpdatePanels, cela fonctionne comme prévu

EDIT: Utilisé this.GetType() au lieu de typeof (Page), mais pas de chance

EDIT Encore une fois:

Matt - J'ai essayé pour remplacer le typeof (Page) avec le nom UC. Voici la ligne mise à jour:

ScriptManager.RegisterStartupScript(this, typeof(TemplateAreaTypeOne), "Load_" + this.ClientID, "...JS function here,,", true); 

Pour clarifier, la page charge l'UC parent qui a ces UpdatePanels. Le ParentUC charge ensuite le ChildUC et le ScriptManager.RegisterStartuScript est utilisé dans Teh ChildUC

EDIT

Le balisage a:

<script type="text/javascript"> 
//<![CDATA[ 
; findControl('PageLoadedHiddenTxtBox').value ='Set';OnLoadBegin('ctl00_WorkSpaceContent_ctlUnion1_ctlUnion1Child','Edit');OnLoadEnd('ctl00_WorkSpaceContent_ctlUnion1_ctlUnion1Child','Edit'); 
document.getElementById('ctl00_WorkSpaceContent_informationSummary').dispose = function() { 
    Array.remove(Page_ValidationSummaries, document.getElementById('ctl00_WorkSpaceContent_informationSummary')); 
} 
//]]> 
</script> 

Notez que les fonctions qui sont appelées sont les OnLoadBegin et OnLoadEnd qui ont été ajouté au code HTML

EDIT dE NOUVEAU

eu à travailler en utilisant:

ScriptManager.RegisterStartupScript(this.Page, typeof(Page),....) 

Je ne sais pas pourquoi cela fonctionne lorsque j'utilise la référence à la page.

  1. Est-ce que ce travail si j'ai plusieurs contrôles sur la page?
  2. Pourquoi cela fonctionne-t-il lorsque j'utilise une référence à la page?
+0

Pouvez-vous ajouter tout le code de votre panneau de mise à jour? – RSolberg

+0

vous devez contrôler le type pas le type de ceci, quel que soit le contrôle que vous ciblez, vous avez besoin de ce type enregistré pour le script de démarrage, donc si vous chargez un contrôle MyControl puis typeof (MyControl) le startupscript doit savoir quoi cible dans la publication partielle – Matt

+0

Je pense que vous pouvez avoir d'autres problèmes ici en ajoutant le contrôle de codebehind, scriptmanager enregistre les scripts après que le balisage principal a été analysé, donc vous ne pouvez pas utiliser les remplacements de type <% %> dans le js ajouté façon, id aiment exclure le type de contrôle d'abord si – Matt

Répondre

2

votre RegisterStartupScript doit cibler le contrôle pas la page n'utilise pas typeof (Page)

Questions connexes