以编程方式在aspx中呈现静态声明的控件

时间:2013-06-21 12:44:49

标签: asp.net rendercontrol

我尝试以编程方式将aspx页面呈现为字符串。 渲染将从控制台应用程序完成。 现在我已经在aspx页面中使用以编程方式声明的控件工作了,这一切都很好而且花花公子。 但是静态声明的控件呢?有什么办法可以实现吗?

示例代码: 页面渲染:

static string RenderPage() {

        ClassLibrary1.FormlessPage pageHolder = (ClassLibrary1.FormlessPage)new WebApplication1.WebForm1();
        pageHolder.DesignerInitialize();

        StringWriter output = new StringWriter();
        HttpRequest httpRequest = new HttpRequest("", "http://localhost/", "");
        HttpResponse httpResponse = new HttpResponse(output);
        HttpContext context = new HttpContext(httpRequest, httpResponse);
        context.Server.Execute(pageHolder, output, false);

        return output.ToString();
    }

无形式页面类

namespace ClassLibrary1 {
public class FormlessPage : System.Web.UI.Page {
    public override void VerifyRenderingInServerForm(Control control) {}
}
}

现在,当我在WebForm1中声明控件(在参考Web应用程序项目中,但在同一项目中完成时行为相同)时,它们就可以正常呈现。

public partial class WebForm1 : ClassLibrary1.FormlessPage {
    protected void Page_Load(object sender, EventArgs e) {
        this.Controls.Add(new TextBox() { ID = "tbSomeText", Text = "default text" });
    }
}

...但是不呈现静态html和静态声明的控件。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
...blah...blah...
<form id="form1" runat="server">
<div>
    text
    <asp:TextBox runat="server" ID="tbSomething"></asp:TextBox>
</div>
</form>
...blah...blah...

有没有办法完全伪造这种行为并实现标记渲染? 从上面得到的输出只是:

<input name="tbSomeText" type="text" value="default text" id="tbSomeText" />

0 个答案:

没有答案