我有一个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>
答案 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)
我将测试该理论以肯定地发现...