ASP.NET引入了“状态”,状态用于储存当前会话中当前用户的所有控件和变量的当前值的。网络本身是没有状态的,每次页面提交到服务器后,接着返回浏览器,该页面会重新创建一次。.NET引入了四种状态,从而使一切变得简单从容了起来。这四种状态是
*视图状态[ViewState]
*控件状态[ControlState]
*应用程序状态[Application_Start,.._End..,_Error...]
*会话状态[SessionState]
这个示例是以ViewState为主的,其中的一些思路很适合入门。
前台文件:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!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>PageProcessingDemo</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:Label ID="Label_Welcome" runat="server" Text="输入您的名字并选择最近去过的国家"></asp:Label>
- <br />
- <br />
- <asp:TextBox ID="NameTextBox" runat="server"></asp:TextBox>
- <br />
- <br />
- <asp:ListBox ID="CountryList" runat="server" SelectionMode="Multiple">
- </asp:ListBox>
- <br />
- <asp:Button ID="ThisYearButton" runat="server" Text="今年" CommandName="今年"
- οnclick="Button_Click" />
- <asp:Button ID="LastYearButton" runat="server" Text="去年" CommandName="去年"
- οnclick="Button_Click" />
- <br />
- <br />
- <asp:Label ID="ResultLabel" runat="server"></asp:Label>
- <hr />
- </div>
- <asp:Label ID="TimeStampLable" runat="server" ></asp:Label>
- <p>
- <asp:Label ID="NowLabel" runat="server" ></asp:Label>
- </p>
- </form>
- </body>
- </html>
后台文件:
- using System;
- using System.Configuration;
- using System.Data;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)//仅在第一次进入页面时加载;下面的数据或许来自数据库,或者来自WEB Service等等,为了节省资源与时间。
- {
- CountryList.Items.Add("CHINA");
- CountryList.Items.Add("US");
- CountryList.Items.Add("UK");
- CountryList.Items.Add("FRANCE");
- CountryList.Items.Add("ITALY");
- TimeStampLable.Text = "您访问该页的时间为:"+DateTime.Now.ToString();
- }
- NowLabel.Text = "当前时间为:" + DateTime.Now.ToString();
- }
- protected void Button_Click(object sender, EventArgs e)
- {
- string cmdName = ((Button)sender).CommandName;//前台中的两个Button共用一个事件Button_Click,并各自设置了自己的CommandName
- ResultLabel.Text += string.Format("{0}{1}去过的国家有:</br>", NameTextBox.Text,cmdName);//string.Format的用法
- foreach (ListItem item in CountryList.Items) //foreach的简单用法
- if (item.Selected)
- {
- ResultLabel.Text+="* "+ item.Value+"<br/>";
- }
- ResultLabel.Text += "<br/>";
- }
- protected override void OnPreRender(EventArgs e)
- {
- base.OnPreRender(e);
- NameTextBox.Text = string.Empty;
- CountryList.SelectedIndex = -1;
- }
- protected override void OnUnload(EventArgs e)
- {
- base.OnUnload(e);
- }
- }
- 该实例来源于 TotalTraining 的讲座,在Button_Click的CommandName取值的步骤上没有按照讲座的做法,原讲座的做法是:
- Button SenderButton =sender as Button;
- string yearmsg;
- if (SenderButton.CommandName=="在前台输入的CommandName")
- {
- .....
- }
- else....