Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net UpdatePanel+;服务器。传输问题?_Asp.net_Ajax_Updatepanel_Server.transfer_Asynchronous Postback - Fatal编程技术网

Asp.net UpdatePanel+;服务器。传输问题?

Asp.net UpdatePanel+;服务器。传输问题?,asp.net,ajax,updatepanel,server.transfer,asynchronous-postback,Asp.net,Ajax,Updatepanel,Server.transfer,Asynchronous Postback,我正在尝试在ASP.NET应用程序中使用UpdatePanel。不幸的是,我似乎不能这样做 修改应用程序的该组件是不可能的-该体系结构广泛使用了Server.Transfer()-本质上,每个页面请求都通过此方法。是否存在此问题的解决方法?现在不得不做整版的回发是很不流行的…我知道了!感谢Og:) 为了解决这个问题,我可以简单地告诉ASP.NET AJAX客户端框架将部分请求直接指向Server.Transfer()调用的实际目标。我非常害怕可能的副作用(谁知道这跳过了什么——基础设施确实有目的

我正在尝试在ASP.NET应用程序中使用UpdatePanel。不幸的是,我似乎不能这样做

修改应用程序的该组件是不可能的-该体系结构广泛使用了Server.Transfer()-本质上,每个页面请求都通过此方法。是否存在此问题的解决方法?现在不得不做整版的回发是很不流行的…

我知道了!感谢Og:)

为了解决这个问题,我可以简单地告诉ASP.NET AJAX客户端框架将部分请求直接指向Server.Transfer()调用的实际目标。我非常害怕可能的副作用(谁知道这跳过了什么——基础设施确实有目的),但到目前为止,它似乎运行良好

以下是修复问题的方法,在我的页面的加载事件中调用:

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

这应该以更合适的方式进行:

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

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

响应.写入(“窗口.打开('new tab page link','u blank');”;
Response.Write(“this.window.location='link to other page';”

没有涉及aspx更改-只需在Page_Load中调用此方法,页面上的所有UpdatePanel都将开始工作。欢迎使用SO。请为你的答案提供一些背景。仅链接和仅代码的答案不符合本网站的标准:我的列表页面上有pop pup,所以当我使用服务器时。转到我的弹出页面。它没有正确地重定向。当弹出窗口显示加载时,位置栏上的链接未更改。这很奇怪,所以我用这段代码来解决这个问题,它工作得很好。