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);
}
}
Sander pouvez-vous publier le code aspx –
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