【问题标题】:Server.Execute() does not wait for the second aspx page to finish executing?Server.Execute() 不等待第二个 aspx 页面完成执行?
【发布时间】:2023-04-02 02:52:01
【问题描述】:

我有一个 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>

【问题讨论】:

  • 在我看来像 VB,而不是 C#
  • asp.net 是同一个概念...
  • 为什么这个问题用 Telerik 和 javascript 标记?
  • 因为所有 Telerik 图表都呈现为 SVG,这就是我正在抓取的内容,并且回发与 javascript 相关。
  • 是什么让你认为它没有等待被调用的页面完成?如果您期望设置会话变量,则不会。 Server.Execute() 是一个完全不同的过程,因此是一个新的 Session。

标签: javascript asp.net vb.net telerik


【解决方案1】:

泰格,

你做错了。这是捕获 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)

我将测试这个理论以确定...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2020-10-30
    • 2019-02-16
    • 2020-07-02
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多