【问题标题】:Rendering ASPX Page without a request在没有请求的情况下呈现 ASPX 页面
【发布时间】:2011-02-22 15:04:03
【问题描述】:

我有一个 ASPX 页面,我打算将其用作模板来生成一些 HTML。我已经定义了我的标记和数据绑定控件,并构建了一个函数来执行所有数据绑定,调用 this.Render 并返回 HTML。当从 Page_Load 调用时,该函数工作正常。

我的意图是绕过页面请求并直接调用该方法并获取页面 HTML,但是当我调用该函数而不发出 HTTP 请求时,我的服务器端控件都没有初始化。

有什么方法可以在页面上调用方法,传递一些参数并获取 HTML 输出,而无需发出 HTTP 请求。我相信 Server.Execute 可以做到,但我找不到在其中传递参数的方法。

我是这样调用函数的

MyPage ThreadHTMLGenerator = new MyPage;
string threadHTML= ThreadHTMLGenerator.GenerateExpandedHTML(param1, param2, param3);

【问题讨论】:

  • 如果不是通过 HTTP 请求,您当前如何调用该方法?
  • 前段时间我需要做同样的事情,this article 帮了我很多。它准确地涵盖了您需要做的事情。

标签: c# asp.net


【解决方案1】:

你需要使用Server.Execute:

var page = new MyPage();
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, false);

或者,如果您需要传递自己的查询字符串参数,您可以对自己执行 WebRequest:

var request = WebRequest.Create("http://www.mysite.com/page.aspx?param1=1&param2=2");
var response = (HttpWebResponse)request.GetResponse ();
var dataStream = response.GetResponseStream ();
var reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();

【讨论】:

  • 这没有帮助。查看已编辑的问题。在这种情况下 param1,param2 去哪里
  • 从页面访问您自己的服务器的一些注意事项需要注意: 1) ASP.NET 会话状态每个会话只允许一个请求,因此您可能会陷入死锁。解决方案:查看IReadOnlySessionState。 2) 如果您的站点位于仅在一台机器上具有 cookie/会话状态且没有共享状态的负载均衡器后面,那么您必须确保在请求中访问同一台机器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2011-05-23
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2012-02-02
相关资源
最近更新 更多