ASP.Net Webforms有些奇怪

时间:2015-04-19 07:02:34

标签: asp.net webforms

我错误地尝试了一些东西,我不明白为什么这样做有效:

我创建了两个名为page1.aspx和page2.aspx

的asp.net网络表单

在page1.aspx:

  • 在代码后面我声明了一个静态字符串:field1。
  • 我放了一个简单的按钮。
  • 当我点击此按钮时:
    • field1 =“Hello world”
    • 的Response.Redirect( “page2.aspx”)

在page2.aspx上,在Page_load中,我显示page1.field1值。 加载page2.aspx时,不应在内存中加载page1.aspx。我不明白为什么page1.field1仍然包含“Hello world value!”

任何人都可以解释一下为什么这段代码有效吗?以这种方式工作是一件好事吗? asp是否在viewstate或session中存储静态字段?

由于

这是page1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="page1.aspx.cs" Inherits="WebApplication7.page1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>

这是page1.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication7
{
    public partial class page1 : System.Web.UI.Page
    {
        public static string field1;

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            field1 = "Hello world";
            Response.Redirect("page2.aspx");
        }
    }
}

这是page2.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication7
{
    public partial class page2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(page1.field1);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

一旦你使一个字段静态,它将在内存中,直到应用程序池被回收(完整的应用程序内存被回收)。我不知道你在尝试什么,但在页面后面的代码中声明一个静态字段并不是一个好主意。

答案 1 :(得分:0)

关键字&#34;静态&#34;表示类中只存在给定变量的一个实例。静态变量用于定义常量,因为可以通过调用类来检索它们的值,而无需创建它的实例。

静态变量可以在成员函数或类定义之外初始化。

注意

与其他成员变量不同,对于该类的所有对象,内存中只存在一个静态变量副本。因此,所有对象在内存中共享一个静态变量副本。

在你的情况下,你在Page1中设置了field1 = "Hello World",点击了按钮,你将被重定向到Page2,并在你的Page1类的静态变量页面上写下该field1变量。