我错误地尝试了一些东西,我不明白为什么这样做有效:
我创建了两个名为page1.aspx和page2.aspx
的asp.net网络表单在page1.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);
}
}
}
答案 0 :(得分:0)
一旦你使一个字段静态,它将在内存中,直到应用程序池被回收(完整的应用程序内存被回收)。我不知道你在尝试什么,但在页面后面的代码中声明一个静态字段并不是一个好主意。
答案 1 :(得分:0)
关键字&#34;静态&#34;表示类中只存在给定变量的一个实例。静态变量用于定义常量,因为可以通过调用类来检索它们的值,而无需创建它的实例。
静态变量可以在成员函数或类定义之外初始化。
注意强>
与其他成员变量不同,对于该类的所有对象,内存中只存在一个静态变量副本。因此,所有对象在内存中共享一个静态变量副本。
在你的情况下,你在Page1中设置了field1 = "Hello World"
,点击了按钮,你将被重定向到Page2,并在你的Page1类的静态变量页面上写下该field1变量。