使用ASP.Net服务器控件代码从.ashx生成
我正在尝试获取以前完整的.aspx页面上的一组现有代码,并在.ashx处理程序中执行相同的操作 代码创建了一个HtmlTable对象,将行和单元格添加到这些行中,然后将该html表添加到.aspx的控件集合中,然后将其添加到页面上已经存在的div中 我试图保持代码的灵活性,但不是将控件放入div中,而是实际生成html,我将返回一大块文本,这些文本可以通过AJAX客户端调用 当我尝试使用InnerHtml属性(表示不支持该属性)时,HtmlTable会出错;当我尝试RenderControl时,在首先创建TextWriter,然后创建HtmlTextWriter对象后,会出现页面不能为null的错误使用ASP.Net服务器控件代码从.ashx生成,asp.net,httphandler,ashx,htmltextwriter,Asp.net,Httphandler,Ashx,Htmltextwriter,我正在尝试获取以前完整的.aspx页面上的一组现有代码,并在.ashx处理程序中执行相同的操作 代码创建了一个HtmlTable对象,将行和单元格添加到这些行中,然后将该html表添加到.aspx的控件集合中,然后将其添加到页面上已经存在的div中 我试图保持代码的灵活性,但不是将控件放入div中,而是实际生成html,我将返回一大块文本,这些文本可以通过AJAX客户端调用 当我尝试使用InnerHtml属性(表示不支持该属性)时,HtmlTable会出错;当我尝试RenderControl时,
以前有人这样做过吗?有什么建议吗?另一个选项是在处理过程中托管ASP.NET HTTP管道,将页面呈现为流,并在处理页面后读取需要从HttpListenerContext.Response.OutputStream流发送的HTML 这篇文章有一些细节:*上面是最新的 好的,即使在Matt更新之后,也有一个解决方法;) 首先,我们必须使用一个内部带有
表单
的页面。否则,我们将无法添加ScriptManager
控件。还有一件事:ScriptManager
控件应该是表单中的第一个控件。更简单的方法是:
Page page = new Page();
Button button = new System.Web.UI.WebControls.Button
{
ID = "btnSumbit",
Text = "TextButton",
UseSubmitBehavior = true
};
HtmlForm form = new HtmlForm
{
ID="theForm"
};
ScriptManager scriptManager = new ScriptManager
{
ID = "ajaxScriptManager"
};
form.Controls.Add(scriptManager);
form.Controls.Add(button);
page.Controls.Add(form);
using (StringWriter output = new StringWriter())
{
HttpContext.Current.Server.Execute(page, output, false);
context.Response.ContentType = "text/plain";
context.Response.Write(output.ToString());
}
这很有效。输出非常大,因此我决定不将其包括在我的答案中:)
实际上,有一个解决办法。是的,我们可以在handler中呈现控件 首先,我们需要一个无格式的页面。因为没有它,我们会: “按钮”类型的控件“btnSumbit” 必须放置在带有 runat=server 其次,没有人能阻止我们创建
FormlessPage
页面的实例。现在,让我们在那里添加一个控件(我决定添加一个按钮
控件作为示例,但您可以使用任何控件)
第三,让我们捕获输出。为此,我们使用HttpServerUtility。执行方法:
为指定的对象执行处理程序
上下文中的虚拟路径
当前请求。A.
System.IO.TextWriter
捕获输出
从已执行的处理程序和
布尔参数指定是否
清除
System.Web.HttpRequest.QueryString
和
System.Web.HttpRequest.Form
收藏
代码如下:
using (StringWriter output = new StringWriter())
{
HttpContext.Current.Server.Execute(page, output, false);
context.Response.ContentType = "text/plain";
context.Response.Write(output.ToString());
}
结果将是:
此外,我可以推荐ScottGu的文章。希望你能在那里找到很多有用的东西。这对我90%的需求非常有效,非常感谢。然而,我还有一个障碍。这里需要呈现Telerik控件。我可以添加控件,但他们需要一个scriptmanager,否则它会在渲染时崩溃。我曾尝试将一个控件添加到页面中,但随后出现了一个错误,即object not set to instance。
FormlessPage page = new FormlessPage();
Button button = new System.Web.UI.WebControls.Button
{
ID = "btnSumbit",
Text = "TextButton",
UseSubmitBehavior = true
};
page.Controls.Add(button);
using (StringWriter output = new StringWriter())
{
HttpContext.Current.Server.Execute(page, output, false);
context.Response.ContentType = "text/plain";
context.Response.Write(output.ToString());
}