【问题标题】:Is it possible to run an aspx file in background as "In memory" operation是否可以在后台运行 aspx 文件作为“内存中”操作
【发布时间】:2013-12-31 08:54:22
【问题描述】:

我在IIS 上有一个实际存在的aspx 文件。它有一个 asp.net Grid View 控件和几行 html。

现在我想要的是,代码将在内存中的某处呈现 aspx,并在运行时填充有数据库的网格视图。然后通过我的代码,我将能够读取整个生成的 html。

有可能吗?或任何替代方法,以便我可以打开表单,但它对用户不可用,某种visible=false thingy。

请帮忙。

注意

我期待与我们用来读取 txt 文件的过程相同。但是这里我需要多做一个填充,也就是调用页面生命周期事件。

【问题讨论】:

  • 什么意思,去掉 HTML?你不想要 HTML 吗?还是您只想要一些 HTML?您将如何处理此页面的结果?
  • @JohnSaunders :我在内存中渲染 aspx 后简单的单词,我想将其整个 html 作为普通文本读取
  • 好的,所以你不想剥离 HTML,你想阅读 HTML。 “Strip”意味着删除它的一部分,就像您可能出于某种原因想要删除 <head> 元素一样。
  • @JohnSaunders 对不起我的错误...问题已更新...
  • 你不能简单地使用WebClient.DownloadString 吗?将其指向您的 ASPX 文件并下载整个 HTML?

标签: c# asp.net dynamic-pages


【解决方案1】:

您可以使用RenderControl method 将控件输出到HtmlTextWriter 对象。

using (var textWriter = new StringWriter())
using (var writer = new HtmlTextWriter(textWriter))
{
    yourControl.RenderControl(writer);
    var html = textWriter.ToString();
}

【讨论】:

  • 问题是针对完整的 aspx 页面,而不是仅针对控件
  • 页面继承自Control,因此您可以使用相同的方法。
  • @Aristos 是的...实际上我在那个页面上也需要网格绑定
  • @Amit:在渲染之前在页面上调用DataBind。请注意,您也不会拥有页面生命周期的其余部分,因此例如没有“点击”事件处理。
  • @JohnSaunders 没有按钮。实际上,我只需要数据绑定事件,但这可能需要不止一个网格/中继器
【解决方案2】:

从设计的角度来看,您所描述的场景并不是一个很好的场景。我必须明确表示,在正常情况下,我绝不会建议这样做。我想你有一个很好的理由必须使用这个“隐藏”页面。

所以这是我的“建议”。您可以在另一个进程中的单独 Web 应用程序中托管“隐藏的”aspx,不能从服务器外部访问。然后,您的普通 asp.net 应用程序可以在后面的代码上发出 HTTP 请求,定位“隐藏”页面并使用响应(使用 HTML Agility 之类的工具解析 HTTP 响应。您可以通过将其隐藏来隐藏特定页面IIS 中的另一个站点并通过防火墙规则保护它。我相信还有其他方法可以隐藏它,但这是一种简单的方法。

希望我能帮上忙!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2012-06-11
    相关资源
    最近更新 更多