Есть ли обходной путь для проблемы UpdatePanel + Server.Transfer? - PullRequest
2 голосов
/ 05 декабря 2009

Я пытаюсь использовать UpdatePanel в своем приложении ASP.NET. К сожалению, кажется, что я не могу сделать это , если я использую Server.Transfer () в моем приложении .

Изменение этого компонента приложения невозможно - архитектура широко использует Server.Transfer () - по сути, каждый запрос страницы проходит через этот метод. Существует ли какое-либо решение этой проблемы? Необходимость делать полностраничные постбэки в наши дни так не модна ...

Ответы [ 3 ]

4 голосов
/ 05 декабря 2009

Я понял! Спасибо Ог за странные блоги на иностранных языках :)

Чтобы исправить это, я могу просто сказать клиентской инфраструктуре 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);
        }
    }
0 голосов
/ 15 августа 2016

Response.Write ("window.open ('ссылка на новую вкладку', '_ blank');"); Response.Write ("this.window.location = 'ссылка на другую страницу';");

0 голосов
/ 07 августа 2013

Это должно работать более корректно:

если вы вызываете Server.Transfer из обработчика событий элемента управления, просто зарегистрируйте этот элемент управления в качестве PostBackTrigger в разделе «Триггеры» панели обновления:

<Triggers>
    <asp:PostBackTrigger ControlID="controlId" />
</Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...