UpdatePanel + Server.Transfer问题是否有任何解决方法?

时间:2009-12-05 12:09:39

标签: asp.net ajax updatepanel server.transfer asynchronous-postback

我正在尝试在ASP.NET应用程序中使用UpdatePanel。不幸的是,似乎我不能这样做if I am using Server.Transfer() in my application

修改应用程序的该组件是不可能的 - 该体系结构广泛使用Server.Transfer() - 实质上,每个页面请求都通过此方法。是否存在此问题的解决方法?这些天不得不做全页回发是不合时宜的......

3 个答案:

答案 0 :(得分:4)

我知道了!感谢Og strange foreign language blogs:)

要修复它,我可以简单地告诉ASP.NET AJAX客户端框架直接在Server.Transfer()调用的真实目标上引导部分请求。我非常害怕可能出现的副作用(谁知道这会跳过什么 - 基础设施确实有用)但到目前为止似乎工作正常。

这是解决问题的方法,在我的页面的Load事件中调用:

    ///
    /// 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);
        }
    }

答案 1 :(得分:0)

这应该以更恰当的方式运作:

如果从控件的事件处理程序中调用Server.Transfer,只需将该控件注册为更新面板的“触发器”部分中的PostBackTrigger:

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

答案 2 :(得分:0)

Response.Write(“window.open('new tab page link','_ blank');”);                 Response.Write(“this.window.location ='链接到另一个页面';”);