关于 asp.net:Compile aspx page \\”on the fly\\”

Compile aspx page "on the fly"

我正在尝试在运行时构建一个 aspx 页面(由另一个最终重定向到新页面的 aspx 页面)。据我了解,aspx 页面必须在用户查看它们之前进行预编译。也就是说,aspx页面必须编译成/bin文件夹下的DLL。

在我将用户重定向到页面之前,是否可以告诉 IIS,或者通过 VB.NET 代码对其进行排序,以编译页面?

任何帮助将不胜感激。


您可以使用 VirtualPathProvider 类从数据库加载页面。


基本上您需要的是动态呈现页面内容。您可以通过将控件(HTML 或 Server Ones)添加到控件集合(例如占位符服务器元素)在服务器端动态创建页面内容。

例如,您可以使用以下标记创建页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="StackOverflowWebApp.TestPage" %>

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   
</head>
<body>
    <form id="form1" runat="server">
       

    </asp:PlaceHolder>

    </form>
</body>
</html>

然后在类后面的代码中,我们可以添加控件来渲染,这是动态读取数据库信息所必需的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace StackOverflowWebApp
{
    public partial class TestPage : Page
    {
        #region Methods

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            // HERE get configuration from database.

            // HERE create content of the page dynamically.

            // Add reference to css file.
            HtmlLink link = new HtmlLink { href="~/Styles/styles.css" };
            link.Attributes.Add("type","text/css");
            link.Attributes.Add("rel","stylesheet");
            this.Page.Header.Controls.Add(link);

            // Add inline styles.
            HtmlGenericControl inlineStyle = new HtmlGenericControl("style");
            inlineStyle.InnerText ="hr {color:sienna;} p {margin-left:20px;}";
            this.Page.Header.Controls.Add(inlineStyle);

            // Add div with css class and styles.
            HtmlGenericControl div = new HtmlGenericControl("div");
            this.ContentPlaceHolder.Controls.Add(div);
            div.Attributes.Add("class","SomeCssClassName");
            div.Attributes.CssStyle.Add(HtmlTextWriterStyle.ZIndex,"1000");

            TextBox textBox = new TextBox { ID ="TestTextBox" };
            div.Controls.Add(textBox);

            // and etc
        }

        #endregion
    }
}

注意:此示例可以作为创建动态页面的起点,其内容取决于数据库或配置中指定的值。