1

我有代码可以在我的 asp.net 网站中动态创建一个新页面,它的工作非常好。但是当我创建新页面并转到该页面时,第一次加载很长 20+ 秒,这可能是因为当我创建新页面时所有网站都重新启动?

每次创建新页面时,如何防止我的应用程序重新启动?

II7

这只是一个示例代码,看看我如何创建新页面,代码不一样但相似:

string fielName = Server.MapPath("~/file.aspx");               
// create a writer and open the file
TextWriter tw = new StreamWriter(fielName);

// write a line of text to the file
tw.WriteLine(@"<%@ Page Language=""C#"" AutoEventWireup=""true"" CodeFile=""file.aspx.cs"" Inherits=""file"" %>

<!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"">
    <div>    
    </div>
  </form>
</body>
</html>
");

// close the stream
tw.Close();


tw = new StreamWriter(fielName + ".cs");

// write a line of text to the file
tw.WriteLine(@"using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class file : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    Response.Write(""new File "");   
  }
}
");

// close the stream
tw.Close();
4

2 回答 2

1

创建新的 aspx 文件时,您无法阻止应用程序池回收,重新编译这些 aspx 最终需要应用程序池回收,所以 IMO 你在那个论坛上得到了一个很好的答案。

简而言之,你做错了。无需在磁盘上创建页面,您的代码和标记将根据数据库中的数据生成不同的页面。

你必须改变它,因为那样这将不起作用。

例如,如果您在标记中有 TextBox :

<asp:TextBox ID="txtDataFromDB" runat="Server"/>

然后在后面的代码中:

protected void Page_Load(object sender, EventArgs e)
{          
  txtDataFromDB.Text = GetDataFromDatabase();
}

您的页面将根据您从 DB 获得的数据显示不同的内容。

于 2013-05-07T11:58:51.303 回答
0

你用生命周期吗?

    protected void Page_Load(object sender, EventArgs e)
    {         
        if (!IsPostBack)
        {
            GenerateWebsite();                              
        }
    }

http://msdn.microsoft.com/en-us/library/bb470252%28v=vs.100%29.aspx -> 你读完了吗?

于 2013-05-07T10:50:24.053 回答