Server.Execute()不等待第二个aspx页面完成执行?

时间:2014-07-24 20:16:40

标签: javascript asp.net vb.net telerik

我有一个aspx页面,它通过Server.Execute()执行另一个aspx页面,因为我需要调用aspx页面来回发以获取会话变量。但是,我在我的代码中注意到,当调用Server.Execute()时,它不会等待被调用页面加载和后退,代码只是继续,页面只在函数完成后加载?有谁知道如何解决这一问题?下面是我在父页面中使用的代码,用于调用我要加载的页面。

Imports System.IO

Public Class TriggerPage
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Server.Execute("SvgForm.aspx", False)
    'This variable is only populated after the SvgForm.aspx executes and posts back since the Session variable is initialized there
    Dim htmlCode As String = Session("svgVariable")
End Sub

End Class

Aspx页面代码:

      <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="TriggerPage.aspx.vb" Inherits="TelerikChart.TriggerPage" %>

    <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body onload="openWindow()">
        <form id="form1" runat="server">
        <div>
            <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
                <Scripts>
                    <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js">
                    </asp:ScriptReference>
                    <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js">
                    </asp:ScriptReference>
                    <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js">
                    </asp:ScriptReference>
                </Scripts>
            </telerik:RadScriptManager>


            <telerik:RadWindowManager ID="RadWindowManager1" runat="server"></telerik:RadWindowManager>

            <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
                <script type="text/javascript">
                    function openWindow() {
                        window.open('svgForm.aspx'); return false;
                    }

                    function RefreshParentPage() {
                        document.location.href = document.location.href;
                    }
                </script>
            </telerik:RadScriptBlock>
        </div>
        </form>
    </body>
    </html>

1 个答案:

答案 0 :(得分:0)

泰格

您要解决这个错误。这是捕获Server.Execute命令的输出html的方式:

Dim sw As New StringWriter()
Server.Execute("SvgForm.aspx", sw)
Dim htmlCode As String = sw.ToString

在传递数据作为会话变量时要小心。我想我遇到了麻烦,因为Server.Execute()似乎将答复缓存到当前会话的上下文中。因此,至少在当前用户的范围内,对会话变量的后续更改可能不会导致Server.Execute()生成的内容的后续更改。尽管是经验性的,但这是我见过的一些相当疯狂的行为的唯一可行解释。比较安全的做法可能是在请求的URI后面附加一个随机数,以破坏缓存的会话(用户)特定的响应。

Server.Execute("SvgForm.aspx?rand=" & MyRandomNumberGenerator(), sw)

我将测试该理论以肯定地发现...