【问题标题】:ASP.NET - Infinite loop when using server.executeASP.NET - 使用 server.execute 时的无限循环
【发布时间】:2017-11-08 09:58:53
【问题描述】:

当使用server.execute 捕获当前页面的 html 时,以下代码会陷入无限循环。

调试中

Server.Execute 每次都会触发按钮单击事件。但为什么呢?

看来preserveForm = true 正在维护表单中的点击事件,但我需要它来维护我的查询字符串。

Protected Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
  test()
End Sub

Protected Sub test()
  Dim writer As TextWriter = New StringWriter()
  Server.Execute("ThisPage", writer, True)
End Sub

我知道我可以做一些类型或变量标志来检查循环的返回,但我想知道:

  • 这是正确的行为吗?
  • 是这样,为什么?
  • 避免循环的清洁方法。
  • 推荐的替代方法来捕获整个页面 html。

【问题讨论】:

  • 如果将 preserveForm 设置为 false 会发生什么?
  • 您不能将当前查询字符串作为path 参数的一部分传递吗?
  • @CalC 是的,这就是我要做的。您应该就 preserveForm 维护活动事件这一事实发布答案。

标签: asp.net vb.net infinite-loop textwriter


【解决方案1】:

根据 HttpServerUtility.Execute Method 的 MSDN 页面,此方法的 preserveFrom 参数具有以下定义的行为:

preserveForm

类型:System.Boolean

true 保留 QueryString 和 表单集合; false 清除 QueryString 和 Form 集合。

Form 集合将包含页面上控件的状态数据。因此,如果 Execute() 作为事件的一部分执行,这可能会导致无限循环。

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多