2

J'essaie d'utiliser un UpdatePanel dans mon application ASP.NET. Malheureusement, il semble que je ne peux pas le faire if I am using Server.Transfer() in my application.Existe-t-il une solution de contournement pour le problème UpdatePanel + Server.Transfer?

La modification de ce composant de l'application n'est pas possible - l'architecture utilise largement Server.Transfer() - en substance, chaque demande de page passe par cette méthode. Y a-t-il une solution de contournement pour ce problème? Avoir à faire des postbacks pleine page est tellement démodé de nos jours ...

Répondre

4

Je l'ai! Merci Og pour strange foreign language blogs :)

Pour résoudre ce problème, je peux simplement dire à l'infrastructure côté client ASP.NET AJAX de diriger la demande partielle directement à la cible réelle de l'appel Server.Transfer(). J'ai très peur des effets secondaires possibles (qui sait ce que cela saute - l'infrastructure a un but), mais cela semble fonctionner jusqu'à présent.

Voici la méthode qui résout le problème, appelé dans le cas de chargement de ma page:

/// 
    /// Adds to the page a JavaScript that corrects the misbehavior of AJAX when a page is target of a Server.Transfer call. 
    /// 
    protected void AjaxUrlBugCorrection() 
    { 
     string actualFile = Server.MapPath(AppRelativeVirtualPath); 
     string redirectFile = Server.MapPath(Context.Request.FilePath); 
     string baseSiteVirtualPath = HttpRuntime.AppDomainAppVirtualPath; 

     if (actualFile != redirectFile) 
     { 
      System.Text.StringBuilder sbJS = new System.Text.StringBuilder(); 
      string actionUrl = string.Format("'{0}'", baseSiteVirtualPath + AppRelativeVirtualPath.Replace("~", String.Empty)); 
      sbJS.Append("Sys.Application.add_load(function(){"); 
      sbJS.Append(" var form = Sys.WebForms.PageRequestManager.getInstance()._form;"); 
      sbJS.Append(" form._initialAction = " + actionUrl + ";"); 
      sbJS.Append(" form.action = " + actionUrl + ";"); 
      sbJS.Append("});"); 
      ClientScript.RegisterStartupScript(this.GetType(), "CorrecaoAjax", sbJS.ToString(), true); 
     } 
    } 
+0

Sander pouvez-vous publier le code aspx –

+0

Il n'y a pas de changements aspx impliqués - il suffit d'appeler cette méthode dans Page_Load et tous les UpdatePanels sur la page vont commencer à travailler. – Sander

0

Cela devrait fonctionner d'une manière plus appropriée:

si vous appelez Server.Transfer de gestionnaire d'événements d'un contrôle juste registre que le contrôle en tant que PostBackTrigger dans la section triggers du panneau de mise à jour:

<Triggers> 
    <asp:PostBackTrigger ControlID="controlId" /> 
</Triggers> 
0

Response.Write ("window.open ('nouveau lien onglet', '_blanc');"); Response.Write ("this.window.location = 'lien vers une autre page';");

+0

Bienvenue sur SO. Veuillez fournir un contexte à votre réponse. Les réponses au lien uniquement et au code uniquement ne sont pas conformes aux normes de ce site: http://stackoverflow.com/help/how-to-answer –

+0

J'ai un chiot pop sur ma page de liste, donc quand j'ai utilisé Server.Transfer to allez ma page popup. il n'était pas redirigé correctement. comme le popup affiche sur le chargement et le lien n'a pas changé sur la barre d'emplacement. C'est bizarre, donc j'ai utilisé ce code pour résoudre le problème et son fonctionnement bien. –