内联(单文件)与代码后置






4.15/5 (12投票s)
2004年9月3日
3分钟阅读

257241
代码后置页面和单文件页面在处理方式上存在一些差异。
引言
首先,我使用了大量来自 MSDN 的引用。 我认为它们可以比我更好地解释事情,所以让我们开始吧。
尽管 Microsoft® Visual Studio® .NET 使使用 ASP.NET 代码后置模型轻松创建和处理 Web Forms 页面,但您可能会因环境或偏好而使用单文件 Web Forms 页面。 本文概述了这两种模型之间的区别,描述了如何在 Visual Studio 中处理单文件 Web Forms 页面,并向您展示了如何将单文件 .aspx 页面转换为代码后置 Web Forms 页面。
代码后置页面和单文件页面在处理方式上存在一些差异。
代码后置 | 单文件 |
HTML 和控件位于 .aspx 文件中,代码位于单独的 .aspx.vb 或 .aspx.cs 文件中。 | 代码位于包含 HTML 和控件的同一个 .aspx 文件中的 <script> 代码块中。 |
页面的代码被编译成一个单独的类,.aspx 文件从中派生。 | .aspx 文件派生自 Page 类。 |
所有项目类文件(不包括 .aspx 文件本身)都被编译成一个 .dll 文件,该文件被部署到服务器而无需任何源代码。 收到页面请求时,会创建一个项目 .dll 文件的实例并执行。 | 部署页面时,源代码会与 Web Forms 页面一起部署,因为它实际位于 .aspx 文件中。 但是,您看不到代码,只有在页面运行时才会呈现结果。 |
[引用 MSDN:在 Visual Studio .NET 中使用单文件 Web Forms 页面]
使用代码
我个人更喜欢代码后置。 大多数免费的 ASP.NET 托管服务器不允许代码后置,还不知道为什么。
我有时会编写一个基类,该基类派生自 Page
类,而我的所有页面都派生自我的基类。 但是在单文件 Web Form 上,它派生自 Page
类。 因此,这限制了您创建自己的派生基类。
让我们从一个使用代码后置的简单应用程序开始,并将其转换为单文件。
- 打开一个现有项目,或创建一个新的 ASP.NET Web 应用程序。
- 在“项目”菜单上,单击“添加 HTML 页面”。
- 使用 .aspx 扩展名命名新页面,例如 SingleForm1.aspx。
- 设计表单。
- 当您的表单现在在代码后置中工作时,我们可以将其移动到单文件。
- 将您的设计视图更改为 HTML。
- 将您的
Page
指令替换为<%@ Page language="c#" %>
- 在
<Head></Head>
标签之间,添加以下代码<Head> <script language="CS" runat="server"></script> </Head>
- 将您的代码后置代码复制并粘贴到
<script>
标签之间。请注意,我没有任何
private
/public
/ ... 修饰符。<Head> <script language="CS" runat="server"> void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } void btnLogon_Click(object sender, System.EventArgs e) { this.txtUserID.Text = "Logon"; this.txtPassword.Text = ""; } </script> </Head>
- 现在。 我们需要“注册”事件。 由于我找不到
InitializeComponent
方法,因此我在Page_Load
中注册了我的事件。<Head> <script language="CS" runat="server"> void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here this.btnLogon.Click += new System.EventHandler(this.btnLogon_Click); } void btnLogon_Click(object sender, System.EventArgs e) { this.txtUserID.Text = "Logon"; this.txtPassword.Text = ""; } </script> </Head>
- 这就完成了。
现在,如何在内联代码中使用类?
- 首先,您可以创建一个 .cs 文件,在其中声明您的类代码。
- 在
<Head></Head>
标签之间,添加以下代码<Head> <script language="cs" runat="server" src= "MySource.cs"/> <script language="CS" runat="server"></script> </Head>
- 请注意,在您的源文件中,您不包含命名空间。 您只声明类
public class MyClass1 { } public class MyClass2 { protected int Index = 0; public MyClass2() { } } public class MyClass3 : System.Collections.CollectionBase { public int this[int Index] { get { return (int)List[Index]; } set { List[Index] = value; } } }
- 您以与代码后置中相同的方式使用它。
<Head> <script language="CS" runat="server"> void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here this.btnLogon.Click += new System.EventHandler(this.btnLogon_Click); MyClass3 class3 = new MyClass3(); class[0] = "Test"; } void btnLogon_Click(object sender, System.EventArgs e) { this.txtUserID.Text = "Logon"; this.txtPassword.Text = ""; } </script> </Head>