2009-11-23 6 views
1

J'appelle cela dans le code-behind d'une page chargée dans une fenêtre contextuelle Shadowbox:UpdatePanel erreur - ne peut pas le comprendre

 ScriptManager.RegisterStartupScript(this, this.GetType(), 
      "CloseScript", "parent.closeServiceOption();", true); 

Je sais que la fonction Javascript est appelée, depuis obtenir le Alerte() boîte apparaît, et je peux parcourir le code dans la barre d'outils IE Developer.

 function closeServiceOption() { 
      Shadowbox.close(); 
      alert("updating"); 
      __doPostBack('<% =upGrid.ClientID %>', ''); 
     return true; 

upGrid est un asp: UpdatePanel sur la page parent:

 <asp:UpdatePanel ID="upGrid" runat="server" UpdateMode="Conditional" 
     EnableViewState="true"> 

Cette astuce fonctionne sur plusieurs autres pages, mais pas sur celui que je viens d'écrire, et je ne peux pas comprendre Pourquoi.

C'est l'erreur que IE me montre:

Object doesn't support this property or method ScriptResource.axd? 
    d=mnUf4WG8LrLFogIwzhvkGVdo-KPzLIFFBfGx6AcICRfPeY_Du0eoxLRaVGrqyoAqxR8l67 
    1VS6MZAdxdawuxsyoM3wpGxwL83KwO7UehZus1&t=ffffffffec2d9970, 
    line 4723 character 21 

ligne 4723 est le finalement() clause de la fonction SYS $ Bénéfice net $ XMLHttpExecutor:

finally { 
     if (_this._xmlHttpRequest != null) { 
      _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; 
      _this._xmlHttpRequest = null; 
     } 
    } 

2 lignes plus tard, je reçois " Permission denied ", et" Accès refusé "pour toutes les autres propriétés de xmlHttpRequest lorsque je les inspecte dans le débogueur. Encore une fois, j'utilise cette astuce (en appelant __doPostBack sur le client) sur plusieurs autres pages où cela fonctionne. Le UpdatePanel a les mêmes attributs (en particulier, ViewState est activé, et le désactiver ne résout pas le problème), et je ne vois rien d'autre qui soit différent sur cette page, mais il doit y avoir quelque chose qui me manque. Des idées? Firefox/Firebug, btw, ne montre aucune erreur, mais le UpdatePanel ne publie pas non plus.

+0

En postant de nouveau, qu'essayez-vous de faire? Essaies-tu simplement de mettre à jour le contenu? –

+0

Oui - la page de la fenêtre contextuelle a ajouté une ligne au Gridview sur cette page. – cdonner

Répondre

0

Plutôt que de déclencher manuellement __doPostBack, j'appellerais la méthode Update sur votre UpdatePanel.

function closeServiceOption() { 
    Shadowbox.close(); 
    alert("updating"); 
    var upGrid = document.getElementById("upGrid"); 
    upGrid.update(); 
    return true; 
} 
+0

Etes-vous sûr qu'il existe une méthode update()? J'utilise le AjaxToolkit, mais pas d'extensions personnalisées comme celle-ci http://daron.yondem.com/CommentView.aspx?guid=52b9bf2e-bf76-439d-8a5f-e9b1c70ce9e2 – cdonner

+0

Ce n'est pas une extension personnalisée. Cela fait partie du UpdatePanel lui-même. Je l'ai déjà utilisé et je viens de créer un exemple de projet qui l'a utilisé avec succès. –

0

Microsoft doit prendre en compte ces problèmes et les résoudre.

UpdatePanel utilise le rendu partiel. try UpdateMode="Conditional" ChildrenAsTriggers="true">

Le contrôle ne maintient pas son état à RegisterClient Side.

2ème.

Dim cs As ClientScriptManager = Page.ClientScript 
    cs.RegisterClientScriptBlock(Me.GetType(), ControlNAme.ClientID, "<script>" & vbCr & vbLf & "window.ControlNAme='" + ControlNAme.ClientID + "';" & vbCr & vbLf & "</" + "script>") 

3e. Essayez d'utiliser l'interface ICallbackEventHandler pour éviter les postbacks qui pourraient vous faire perdre l'état du contrôle et Javascript commencer à vous embêter.

Questions connexes