我正在尝试在运行时构建一个 aspx 页面(通过另一个最终重定向到新页面的 aspx 页面)。据我了解,aspx 页面必须在用户查看它们之前进行预编译。也就是说,aspx页面必须编译成/bin文件夹下的DLL。
在我将用户重定向到页面之前,是否可以告诉 IIS 或通过 VB.NET 代码对其进行排序以编译页面?
任何帮助将不胜感激。
我正在尝试在运行时构建一个 aspx 页面(通过另一个最终重定向到新页面的 aspx 页面)。据我了解,aspx 页面必须在用户查看它们之前进行预编译。也就是说,aspx页面必须编译成/bin文件夹下的DLL。
在我将用户重定向到页面之前,是否可以告诉 IIS 或通过 VB.NET 代码对其进行排序以编译页面?
任何帮助将不胜感激。
您可以使用VirtualPathProvider 类从数据库加载页面。
基本上你需要的是动态呈现页面的内容。您可以通过将控件(HTML 或 Server Ones)添加到控件集合(例如占位符服务器元素)来在服务器端动态创建页面内容。
例如,您可以使用以下标记创建页面:
<%@ 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">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<asp:PlaceHolder runat="server" ID="ContentPlaceHolder"></asp:PlaceHolder>
</form>
</body>
</html>
然后在类后面的代码中,我们可以添加控件来渲染,这是从数据库中动态读取信息所必需的。
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
}
}
注意:此示例可以作为创建动态页面的起点,其内容取决于数据库或配置中指定的值。